CREATE EXTENSION postgres_fdw;
先用上面的命令安装扩展,按照网上的说法还要先编译什么的我也没执行,反正上面就成功了.
然后是创建远程服务:
CREATE SERVER server156 FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '192.168.1.156',dbname 'bossdb',port '5432');
这里有个坑,就是如果192.168.1.156连不上的情况下上面语句也会执行成功.其实真正的连接到远程服务器是要等到后面dml执行时才会连接
然后是创建用户映射:
CREATE USER MAPPING FOR postgres SERVER server156 OPTIONS (user 'postgres',password '000000');
这里如果输错了也不会知道.
最后是创建远程表
CREATE FOREIGN TABLE if NOT EXISTS qbit_test ( id INTEGER,name CHARACTER VARYING(50),class CHARACTER VARYING(50),time CHARACTER VARYING(50) ) SERVER server156 OPTIONS (schema_name 'public',table_name 'qbit_test');
如果要删除则执行下面命令:
DROP FOREIGN TABLE IF EXISTS qbit_test;
试了一下用本地的表和外边join查询还挺快的:-)
发现一个悲剧,我按照官网alter server 报错.网上也没说法,只能删了重建
另外还发现一个悲剧,如果映射数据库实例和被映射数据库实例在同一个服务下时是不能写地址和端口的(不是“不用”,而是“不能”)
否则就会报错
only connections to self instance are supported,please do not specify the host or hostaddr parameter