FDW简介
FDW(Foreign Data Wrapper)是lightdb的一个插件。通过FDW,可以将远程pg数据库映射到本地(映射为server),将远程数据库table映射为本地的foreign table。通过FDW映射的foreign table,实际数据只存在于远端数据库,本地并不实际存储实际的数据库。读写foreign table会映射为读写远程数据库对应的table。这个模块提供的功能大体上覆盖了较老的 dblink 模块的功能。但是 postgres_fdw 提供了更透明且更兼容标准的语法来访问远程表,并且可以在很多情况下给出更好的性能。最初本地只支持foreign table只读操作,从PG9.3版本开始,支持本地写入foreign table。
使用步骤如下:
使用 CREATE EXTENSION 来安装 postgres_fdw扩展。
使用 CREATE SERVER 创建一个外部服务器对象,它用来表示你想连接的每一个远程数据库。指定除了 user 和 password 之外的连接信息作为该服务器对象的选项。
使用 CREATE USER MAPPING 创建一个用户映射,每一个用户映射都代表你想允许一个数据库用户访问一个外部服务器。指定远程用户名和口令作为用户映射的 user 和 password 选项。
为每一个你想访问的远程表使用 CREATE FOREIGN TABLE 或者 IMPORT FOREIGN SCHEMA 创建一个外部表。外部表的列必须匹配被引用的远程表。但是,如果你在外部表对象的选项中指定了正确的远程名称,你可以使用不同于远程表的表名和/或列名。
完整操作SQL
--安装扩展
create extension IF NOT EXISTS postgres_fdw;
--验证扩展
select * from pg_available_extensions where name='postgres_fdw';
--创建 server
create server server_remote_pg2pg foreign data wrapper postgres_fdw options(host '192.168.1.11',port '5432',dbname 'my');
--创建用户映射
create user mapping for postgres server server_remote_pg2pg options(user 'postgres', password '1234');
--验证
select * from pg_foreign_server;
--创建外部表
create foreign table tb_fdw_foreign(shi varchar,geom geometry(MULTIPOLYGON, 4490)) server server_remote_pg2pg options(schema_name 'dataimporttest',table_name 'shi');
create foreign table tb_fdw_foreign(SHI VARCHAR,geom GEOMETRY(MULTIPOLYGON, 4490)) server server_remote_pg2pg options(schema_name 'dataimporttest',table_name 'SHI');
select * from tb_fdw_foreign;
--操作外部表
INSERT into tb_fdw_foreign(shi,geom) SELECT shi,geom from jxlcs_yw.yjjc_pdtb;
INSERT into tb_fdw_foreign(SHI,geom) SELECT SHI,geom from jxlcs_yw.yjjc_hstb_py;
--删除外部表
drop foreign table tb_fdw_foreign;
--删除用户映射
drop user mapping for postgres server server_remote_pg2pg;
--删除 server
drop server server_remote_pg2pg;
--删除扩展
drop extension postgres_fdw;
参考:
http://www.light-pg.com/docs/lightdb/13.3-22.2/postgres-fdw.html