postgresql使用fdw实现不同数据库之间的数据互通
  • 作者:admin
  • 发表时间:2021-04-24 07:53
  • 来源:未知

前言

最近工作的时候需要用数据库a中的表a1更新插入数据库B的b2表,由于所有的数据库都是postgres数据库,所以想到了postgres_fdw插件。

准备工作

首先要保证两个数据库之间的网络是开放的

数据库的名称是AA ip 10.10.2.100(虚构)端口5432用户名后缀

数据库b名称bb IP 100.20.0.120(虚构)端口6688用户名后缀

首先,使用fdw在两个数据库之间创建连接

1.1安装postgres_fdw插件

1创建扩展名“postgres _ fdw”;

1.2创建外部连接

无论是在A数据库中创建B数据库的连接,还是在B数据库中创建A数据库的连接,本质上都是一样的,为了打开两个数据库,实现数据互操作

1.2.1在数据库a中创建数据库b的连接。

-创建外部服务器

-括号中的三个参数是数据库b的ip、端口和数据库名称。

CREATE SERVER lianjiebb FOReign DATA WRAPPER postgres _ fdw OPTIONS(主机' 100.20.0.120 ',端口' 6688 ',dbname ' BB ');

-创建唐山企业官网用户地图

-括号中的两个参数是数据库b的用户名和密码。

为postgres服务器连洁bb选项创建用户映射(用户“postgres”,密码“数据库密码”);

1.2.2在数据库b中创建数据库a的连接。

-创建外部服务器

-括号中的三个参数是数据库a的ip、端口和数据库名称

CREATE SERVER LianjiAa FOREDIAN DATA WRAPPER postgres _ fdw OPTIONS(主机' 10.10.2.100 ',端口' 5432 ',数据库名' AA ');

-创建用户映射

-括号中的两个参数是数据库a的用户名和密码。

为postgres服务器连洁aa选项创建用户映射(用户“postgres”,密码“数据库密码”);

1.2.3查询外部链接

1从pg_foreign_server选择*

1.3创建外部表

在数据库中创建b1表的外部链接

创建外部表tb_fdw_b1

collect_time时间戳(6),

id varchar(36),

列名1数字(12,2),

列名2 int4,

列名3时间戳(6)

)-与b1相同的表结构

服务器链接-您创建的外部链接的名称

选项(table_name '时序库的表名');

检查外部表是否有数字,如果有,表示ok

1从tb_fdw_b1中选择*

在数据库b上创建a1表的外部链接也是如此。

第二,插入数据

2.1将表a1的数据插入外部表tb_fdw_b1

因为两个表具有相同的表结构,所以可以直接插入

1从a1插入到tb_fdw_b1 SELECT *中;

因为外部表实时改变数据库A中外部表tb_fdw_b1的数据,所以数据库B中b1表的数据也随之改变,实现了我们最初的目标