PostgreSQL 跨数据库访问

有这样的一个业务场景。有一个表对象在数据库 A 中,但是在同一个实例的数据库 B 中我想访问位于 A 库中的这个对象,那么有什么好的方法可以实现呢。

假设在数据库 cloud_test 中有如下的对象,现在想在数据库 cloud_health 中访问这个对象。
CREATE TABLE "public"."vaf1" (
  "vaf01" int8 NOT NULL,
  "vaf01a" int8,
  "vaf01b" int8,
  "vaf04" int2,
  "vaa01" int8 NOT NULL,
  "vaf06" int8,
  "vaf07" int8,
  "bck01a" int4,
  "rownr" int4,
  "bbx01" int4,
  "vaf14" varchar(60),
  "vaf15" varchar(30),
  "bby01" int4,
  "vaf36" timestamp(6),
  PRIMARY KEY ("vaf01")
);

ALTER TABLE "public"."vaf1" OWNER TO "postgres";
CREATE INDEX "ix_vaf1_bbx01" ON "public"."vaf1" USING btree ("bbx01");
CREATE INDEX "ix_vaf1_vaf01a" ON "public"."vaf1" USING btree ("vaf01a");
CREATE INDEX "ix_vaf1_vaf36" ON "public"."vaf1" USING btree ("vaf36");

方案一:使用外部表实现
因为是 cloud_health 访问 cloud_test 数据库,所以需要在 cloud_health 数据库中安装外部插件。反之则在 cloud_test 中进行安装。
在 cloud_health 数据库中先看下外部表插件是否已经安装,如果没有则安装外部表插件。
SELECT * FROM pg_extension WHERE extname = 'postgres_fdw';
CREATE EXTENSION IF NOT EXISTS postgres_fdw;

建立一个外部服务,这个服务指向 cloud_test 数据库
CREATE SERVER IF NOT EXISTS server_remote_140 FOREIGN DATA WRAPPER postgres_fdw options(host '192.168.30.140',port '5432',dbname 'cloud_test');
说明:其中 server_remote_140 这个是外部服务器的名称,自己配置一个名称即可。()中的是数据库服务器的连接配置。

创建一个外部映射
create user mapping for postgres server server_remote_140 options(user 'postgres',password 'Centos@2024');
注意:这里的用户映射是需要存在的用户。SERVER 是前面创建的外部服务器的名称。

创建一个外部表
CREATE FOREIGN TABLE ft_vaf1(vaf01 int8 NOT NULL,vaf01a int8,vaf01b int8,vaf04 int2,vaa01 int8 NOT NULL,vaf06 int8,vaf07 int8,bck01a int4,rownr int4,bbx01 int4,vaf14 varchar(60),vaf15 varchar(30),bby01 int4,vaf36 timestamp(6)) server server_remote_140 options (schema_name 'public',table_name 'vaf1');
说明:ft_vaf1 是外部表的名称,这个表是在 cloud_health 数据库中的,这个表的字段需要跟 cloud_test 中的 vaf1 的字段相同。
备注:需要说明的是在外部表中是不支持键值的定义的。也就是说在外部表上不允许创建主键值。

在 cloud_health 数据库中直接访问 ft_vaf1 表,其内容与 cloud_test 中的 vaf1 表数据相同。
在 cloud_test  数据库的 vaf1 表中插入如下的数据。
INSERT INTO "public"."vaf1" ("vaf01", "vaf01a", "vaf01b", "vaf04", "vaa01", "vaf06", "vaf07", "bck01a", "rownr", "vaf14", "vaf15", "bby01", "vaf36") VALUES (934376602115133442, 934376602115133440, 0, 1, 511562834249924608, 934374864771502081, 0, 18, 2, NULL, '11633', 11956, '2024-01-23 09:18:54');
INSERT INTO "public"."vaf1" ("vaf01", "vaf01a", "vaf01b", "vaf04", "vaa01", "vaf06", "vaf07", "bck01a", "rownr", "vaf14", "vaf15", "bby01", "vaf36") VALUES (934376602115133441, 934376602115133440, 0, 1, 511562834249924608, 934374864771502081, 0, 18, 1, NULL, '11633', 1601584, '2024-01-23 09:18:54');
INSERT INTO "public"."vaf1" ("vaf01", "vaf01a", "vaf01b", "vaf04", "vaa01", "vaf06", "vaf07", "bck01a", "rownr", "vaf14", "vaf15", "bby01", "vaf36") VALUES (934376602115133440, 0, 0, 1, 511562834249924608, 934374864771502081, 0, 18, 0, NULL, NULL, 0, '2024-01-23 09:18:59');
INSERT INTO "public"."vaf1" ("vaf01", "vaf01a", "vaf01b", "vaf04", "vaa01", "vaf06", "vaf07", "bck01a", "rownr", "vaf14", "vaf15", "bby01", "vaf36") VALUES (932591980117118979, 932591980117118978, 0, 1, 932588467865677824, 932588468067004416, 0, 15, 1, NULL, '11633', 6494, '2024-01-18 11:06:57');
INSERT INTO "public"."vaf1" ("vaf01", "vaf01a", "vaf01b", "vaf04", "vaa01", "vaf06", "vaf07", "bck01a", "rownr", "vaf14", "vaf15", "bby01", "vaf36") VALUES (932591980117118978, 0, 0, 1, 932588467865677824, 932588468067004416, 0, 15, 0, NULL, NULL, 0, '2024-01-18 11:07:32');
INSERT INTO "public"."vaf1" ("vaf01", "vaf01a", "vaf01b", "vaf04", "vaa01", "vaf06", "vaf07", "bck01a", "rownr", "vaf14", "vaf15", "bby01", "vaf36") VALUES (932591980117118977, 932591980117118976, 0, 1, 932588467865677824, 932588468067004416, 0, 15, 1, NULL, '11574', 6341, '2024-01-18 11:06:57');

在 cloud_health 数据库的 ft_vaf1 表中查询数据。
SELECT * FROM ft_vaf1;

方案二:使用 DBLINK 实现
跟前面一样,我们需要在数据库 cloud_health 中安装 dblink 插件。
create extension if not exists dblink;
select * from dblink('host=192.168.30.140 port=5432 user=postgres dbname=cloud_test password=Centos@2024'::text,'select * from vaf1'::text)t (column_name type);

方案三:通过 PostgreSQL 的逻辑解析功能,发布订阅来实现。发布订阅的实现逻辑相对复杂一些,涉及好几个方面的知识和一些规则设置,我这里不详细讲解了,后面会配合 CDC 的那一篇详细讲一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《应用概率统计》

《应用概率统计》主要有综合报告、学术论文、应用研究、应用简报、教学研究、学术活动报道、书评、新书介绍等栏目。 一、《应用概率统计》是中国数学会概率统计学会主办的全国性学术刊物,主要刊登概率论与数理统计的理论和应用两方面有创造性的学术论文&#xff0c…

Vue之插槽(slot)

插槽是vue中的一个非常强大且灵活的功能,在写组件时,可以为组件的使用者预留一些可以自定义内容的占位符。通过插槽,可以极大提高组件的客服用和灵活性。 插槽大体可以分为三类:默认插槽,具名插槽和作用域插槽。 下面…

unity3d————Resources异步加载

知识点一:Resources异步加载是什么? 在Unity中,资源加载可以分为同步加载和异步加载两种方式。同步加载会在主线程中直接进行,如果加载的资源过大,可能会导致程序卡顿,因为从硬盘读取数据到内存并进行处理…

fatal error C1083: 无法打开包括文件: “stdio.h”: No such file or directory

在 Windows 上的 “终端” 里,对于已经执行过 cmake -S . -B build -G Ninja 的工程,执行了 cmake --build build出现了报错: fatal error C1083: 无法打开包括文件: “stdio.h”: No such file or directory 原因是,当前 “终端…

SpringBoot开发——Spring Boot 3.3整合RabbitMQ构建高效稳定的消息队列系统

文章目录 一、配置 RabbitMQ二、自动配置的核心组件三、发送消息至指定 Stream四、接收消息与 RabbitListener 注解五、实现自定义 RabbitListenerContainerFactory六、消息重试机制七、总 结 消息队列在分布式系统中起着至关重要的作用,它能够解耦系统、削峰填谷&a…

SpringBoot+Vue3实现数据可视化大屏

前端工程的地址:UserManagerFront: 数据可视化前端 (gitee.com) 效果展示,可以展现出来了,样式可能还有一些丑。 后端代码 后端主要是拿到数据并对数据进行处理,按照前端需要的格式进行返回即可。 import com.njitzx.entity.Student; impor…

vue3: toRef, reactive, toRefs, toRaw

vue3&#xff1a; toRef, reactive, toRefs, toRaw 扫码或者点击文字后台提问 <template><div>{{ man }}</div><hr><!-- <div>{{ name }}--{{ age }}--{{ like }}</div> --><div><button click"change">修…

CDH安装与配置及相关大数据组件实践

CDH安装与配置及相关大数据组件实践 一、CDH 介绍 CDH&#xff08;Cloudera’s Distribution Including Apache Hadoop&#xff09;是一个基于 Web 用户界面的大数据平台版本。它支持大多数 Hadoop 组件&#xff0c;包括 HDFS、MapReduce、Hive、Pig、HBase、Zookeeper、Sqoo…

《网络硬件设备完全技术宝典》

《网络硬件设备完全技术宝典》 网卡 集线器 交换机 路由器 双绞线 光缆 无线接入点AP 交换机技术与选择策略 冗余链路技术 由于物理链路和网络模块的损坏都将导致网络链路的失败&#xff0c;因此两个设备之间&#xff0c;特别是核心交换机与汇聚交换机之间的单链路…

Day46 | 动态规划 :线性DP 最长递增子序列最长连续递增子序列

Day46 | 动态规划 &#xff1a;线性DP 最长递增子序列&&最长连续递增子序列 动态规划应该如何学习&#xff1f;-CSDN博客 本次题解参考自灵神的做法&#xff0c;大家也多多支持灵神的题解 最长递增子序列【基础算法精讲 20】_哔哩哔哩_bilibili 动态规划学习&#…

Win10下使用Anaconda安装GPU版本PyTorch

PyTorch是一个开源机器学习框架&#xff0c;最初来自Meta Ai。如果你想研究人工智能或从事人工智能项目方面的工作&#xff0c;那么在本地机器上使用PyTorch设置开发环境对于许多项目来说都是必不可少的。GPU&#xff08;图形处理单元&#xff09;是一种专用处理器&#xff0c;…

灰狼优化算法

灰狼优化算法&#xff08;Grey Wolf Optimizer&#xff0c;GWO&#xff09;是一种群智能优化算法&#xff0c;由澳大利亚格里菲斯大学学者Mirjalili等人于2014年提出。该算法灵感来源于灰狼群体的捕食行为&#xff0c;通过模拟灰狼的社会等级分层、跟踪、包围和攻击猎物等步骤来…

Chromium 中sqlite数据库操作演示c++

本文主要演示sqlite数据库 增删改查创建数据库以及数据库表的基本操作&#xff0c;仅供学习参考。 一、sqlite数据库操作类封装&#xff1a; sql\database.h sql\database.cc // Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-sty…

java中BigInteger类和BigDecimal类

目录 BigInteger类构造方法用构造方法创建对象BigInteger的四则运算(只能是整数)加法(add方法)减法(subtract方法)乘法(multiply方法)除法(divide方法) BigDecimal类构造方法用构造方法创建对象BigDecimal的四则运算加法(add方法)减法(subtract方法)乘法(multiply方法)乘法(div…

Docker部署Kafka集群,增加 SASL_SSL认证,并集成到Spring Boot,无Zookeeper版

1&#xff0c;准备好Kafka 镜像包&#xff1a; bitnami/kafka:3.9.0 镜像资源包 2&#xff0c;准备好kafka.keystore.jks 和 kafka.truststore.jks证书 具体操作可参考&#xff1a; Docker部署Kafka SASL_SSL认证&#xff0c;并集成到Spring Boot-CSDN博客 3&#xff0c;配置…

微信小程序点击跳转打电话功能

wx.makePhoneCall 属性类型默认值必填说明phoneNumberstring是需要拨打的电话号码successfunction否接口调用成功的回调函数failfunction否接口调用失败的回调函数completefunction否接口调用结束的回调函数&#xff08;调用成功、失败都会执行&#xff09; <view class&q…

apipost下载安装教程、脚本详细使用教程

目录 apipost脚本使用教程 缘由&#xff1a; 实现流程&#xff1a; 1、设置接口需要的URL&#xff1a; 2、boby: 3、预执行操作&#xff1a; 4、断言 5、执行结果&#xff1a; 什么是ApiPost&#xff1f; 下载以及安装&#xff1a; apipost使用文档介绍&#xff1a;…

Python Web 应用开发基础知识

Python Web 应用开发基础知识 引言 随着互联网的快速发展&#xff0c;Web 应用程序的需求日益增加。Python 作为一种简单易学且功能强大的编程语言&#xff0c;已经成为 Web 开发中广受欢迎的选择之一。本文将深入探讨 Python Web 开发的基础知识&#xff0c;包括常用框架、基…

SpringBoot多环境+docker集成企业微信会话存档sdk

SpringBoot多环境docker集成企业微信会话存档sdk 文章来自于 https://developer.work.weixin.qq.com/community/article/detail?content_id16529801754907176021 SpringBoot多环境docker集成企业微信会话存档sdk 对于现在基本流行的springboot环境&#xff0c;官方文档真是比…

在openi平台 基于华为顶级深度计算平台 openmind 动手实践

大家可能一直疑问&#xff0c;到底大模型在哪里有用。 本人从事的大模型有几个方向的业务。 基于生成式语言模型的海事航行警告结构化解析。 基于生成式语言模型的航空航行警告结构化解析。 基于生成式生物序列&#xff08;蛋白质、有机物、rna、dna、mrna&#xff09;的多模态…