暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Postgre pg_fdw PG-PG 跨操作系统数据同步

kk的DBA随笔 2024-12-02
135

结构:

主机名
ip
操作系统
PG
192.168.80.9
centos7.9
qilin
192.168.80.99
中标麒麟 v7.0

fdw 支持同构或异构数据库之间的访问。

部署 FDW 需要在客户端部署。

1. 编译 postgre_fdw

  1. cd/usr/local/postgresql-12.4/contrib/postgres_fdw

  2. make

  3. make install

一般这里面会报权限问题,根据报错调整权限即可。

2. 安装 postgre_fdw

哪个数据库上使用,就在哪个数据库上安装

3. 创建 FDW 服务器

  1. CREATE SERVER pgdb foreign DATA WRAPPER postgres_fdw OPTIONS(host'qilin',port'1922',dbname'testfdw');

host:远程主机名,ip 地址

port:远程数据库监听端口

dbname:远程服务器名字

4. 授权

  1. grant usage on foreign server pgdb to fdw_u1;

5. 创建用户映射(要访问的表的属主是谁)

  1. CREATE USER MAPPING FOR fdw_u1 SERVER pgdb OPTIONS(user'postgres',password'12345');

6. 远程服务器端的主机认证必须使用密码认证

7. 登录 fdw_u1 用户查看 fdw 服务器.

8. 服务器已经建好了一张表

9. 在客户端建一张一模一样的表

  1. CREATE FOREIGN TABLE emp_fdw(
  2. EMPNOint,
  3. ENAME VARCHAR(10),
  4. JOB VARCHAR(9),
  5. MGRint,
  6. HIREDATE date,
  7. SAL float4,
  8. COMM float4,
  9. DEPTNOint
  10. )SERVER pgdb OPTIONS(schema_name'public',table_name'emp');

10,在客户端添加服务器主机名与 ip

11. 访问这张客户端没有数据的外部表

可以看到数据已经访问成功,令人惊讶的是,我尝试了客户端的外部表与服务器的源表不一致,竟仍能访问成功!

可以看到两张表的字段是一样的,但是类型有些许不同,实验证明也可以成功获取到数据。

原理介绍

此外,9.6 版本后,外部表进行的 order by 和聚合,多表连接(需要打开 useremoteestimate)等操作均在服务器端执行。


文章转载自kk的DBA随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论