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

部署 FDW 需要在客户端部署。
1. 编译 postgre_fdw
cd/usr/local/postgresql-12.4/contrib/postgres_fdwmakemake install


一般这里面会报权限问题,根据报错调整权限即可。
2. 安装 postgre_fdw
哪个数据库上使用,就在哪个数据库上安装

3. 创建 FDW 服务器
CREATE SERVER pgdb foreign DATA WRAPPER postgres_fdw OPTIONS(host'qilin',port'1922',dbname'testfdw');
host:远程主机名,ip 地址
port:远程数据库监听端口
dbname:远程服务器名字

4. 授权
grant usage on foreign server pgdb to fdw_u1;

5. 创建用户映射(要访问的表的属主是谁)
CREATE USER MAPPING FOR fdw_u1 SERVER pgdb OPTIONS(user'postgres',password'12345');

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

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


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

9. 在客户端建一张一模一样的表
CREATE FOREIGN TABLE emp_fdw(EMPNOint,ENAME VARCHAR(10),JOB VARCHAR(9),MGRint,HIREDATE date,SAL float4,COMM float4,DEPTNOint)SERVER pgdb OPTIONS(schema_name'public',table_name'emp');

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

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

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


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



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

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




