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,一经查实,立即删除!

相关文章

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+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">修…

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

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

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…

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;配置…

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;的多模态…

【论文分享】基于街景图像识别和深度学习的针对不同移动能力老年人的街道步行可达性研究——以南京成贤街社区为例

全球老龄化趋势加剧, 许多城市中老年人数量不断增加&#xff0c;而现有街道和社区基础设施往往未能满足其步行安全和便利需求。本次我们给大家带来一篇SCI论文的全文翻译&#xff0c;该论文通过探讨不同步行能力的老年人对城市步行环境的需求&#xff0c;提供了关于如何改善城市…

Android Osmdroid + 天地图 (二)

Osmdroid 天地图 &#xff08;二&#xff09; 前言正文一、定位监听二、改变地图中心三、添加Marker四、地图点击五、其他配置① 缩放控件② Marker更换图标③ 添加比例尺④ 添加指南针⑤ 添加经纬度网格线⑥ 启用旋转手势⑦ 添加小地图 六、源码 前言 上一篇中我们显示了地图…

CSS基础知识04

文本溢出通常是指在限定的空间内不能容纳所输入的文字&#xff0c;导致文字超出了容器的边界 一、文本溢出 1.1.css属性处理 所用到的属性 属性属性值overflowvisible&#xff1a;默认值&#xff0c;内容不会被修剪&#xff0c;会呈现在元素框之外。hidden&#xff1a;内容会…

gitlab和jenkins连接

一&#xff1a;jenkins 配置 安装gitlab插件 生成密钥 id_rsa 要上传到jenkins&#xff0c;id_rsa.pub要上传到gitlab cat /root/.ssh/id_rsa 复制查看的内容 可以看到已经成功创建出来了对于gitlab的认证凭据 二&#xff1a;配置gitlab cat /root/.ssh/id_rsa.pub 复制查…

Modbus TCP转Modbus ASCII解决方案

Modbus TCP和Modbus ASCII是两种不同的通信协议。Modbus TCP是一种二进制协议&#xff0c;Modbus ASCII是一种基于文本的协议。二者不能直接转换&#xff0c;因为它们的数据表示方式、消息结构、字符编码等都不相同。 如果你需要将Modbus TCP转换为Modbus ASCII&#xff0c;你…

十三、注解配置SpringMVC

文章目录 1. 创建初始化类&#xff0c;代替web.xml2. 创建SpringConfig配置类&#xff0c;代替spring的配置文件3. 创建WebConfig配置类&#xff0c;代替SpringMVC的配置文件4. 测试功能 1. 创建初始化类&#xff0c;代替web.xml 2. 创建SpringConfig配置类&#xff0c;代替spr…