结构:
主机名 | ip | 操作系统 |
PG | 192.168.80.9 | centos7.9 |
qilin | 192.168.80.99 | 中标麒麟v7.0 |
fdw支持同构或异构数据库之间的访问。
部署FDW 需要在客户端部署。
1.编译postgre_fdw
cd /usr/local/postgresql-12.4/contrib/postgres_fdw
make
make 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 (
EMPNO int ,
ENAME VARCHAR(10),
JOB VARCHAR(9),
MGR int,
HIREDATE date,
SAL float4,
COMM float4,
DEPTNO int
) SERVER pgdb OPTIONS (schema_name 'public',table_name 'emp');
10,在客户端添加服务器主机名与ip
11.访问这张客户端没有数据的外部表
可以看到数据已经访问成功,令人惊讶的是,我尝试了客户端的外部表与服务器的源表不一致,竟仍能访问成功!
可以看到两张表的字段是一样的,但是类型有些许不同,实验证明也可以成功获取到数据。
原理介绍
此外,9.6版本后,外部表进行的order by 和聚合,多表连接(需要打开use_remote_estimate)等操作均在服务器端执行。