Postgresql 跨库同步表及postgres_fdw的用法说明
postgres_fdw模块
PostgreSQL9.3addpostgres_fdwextensionforaccessingremotetables
PostgreSQL9.3新增了一个postgres_fdw模块,已经整合在源码包中.用于创建postgres外部表.
注:db_des为目标库,developer_month_orders_data为表名。意思就是从查询库a中建立同名FOREIGN关联表,
可以查询目标库中的数据。以下命令在需要建立的关联库中执行。
目标库中的表必须存在,也就是先建立好,否则从a库,查询会报找不到表错误
阿里云RDS,数据库:PostgreSQL9.4,跨实例数据库不支持postgres_fdw建立外部表,坑啊!
阿里云技术回复RDS需要10.0版本的postgresql才支持跨实例。不然只能同一个实例下的不同数据库之间的外部表。
--安装postgres_fdw插件 CREATEEXTENSIONpostgres_fdw; --创建远程服务 CREATESERVERremote_serverFOREIGNDATAWRAPPERpostgres_fdw; --查看远程服务 select*frompg_foreign_server; --修改远程服务 alterserverremote_serveroptions(addhostaddr'11.216.10.215', addport'5432',adddbname'db_des'); --SERVER赋权 grantusageonforeignserverremote_servertopostgres; --在本地数据库中创建usermapping CREATEUSERMAPPINGFORpostgresserverremote_serveroptions(user'postgres',password'xxxxx'); --同样创建枚举 CREATETYPEdb_enumASENUM('postgres','sqlserver','mysql'); --查看枚举类型的oid selectoidfrompg_typewheretypname='db_enum'; --创建外部表developer_month_orders_data CREATEFOREIGNTABLEdeveloper_month_orders_data( idintegernotnull, developer_user_idinteger, package_idinteger, order_monthdate, create_datetimetimestamp )SERVERremote_serveroptions(schema_name'public',table_name'developer_month_orders_data'); --查看外部表 select*fromdeveloper_month_orders_data;
ddl维护操作:
dropusermappingforpostgresserverserver_remote; dropserverserver_remote; dropextensionpostgres_fdw; dropforeigntabletest1;
补充:postgresqlpostgres_fdw跨库查询
1安装扩展
createextensionpostgres_fdw;
2本地创建server并查看该server作用是在本地配置一个连接远程的信息,下面的配置是要连接到远程DB名称是postgres数据库
createserverserver_remote_rudy_01foreigndatawrapperpostgres_fdwoptions(host‘192.168.11.44',port‘5432',dbname‘vsphere_info');
查询:
select*frompg_foreign_server;**
3创建用户匹配信息并查看,在本地
for后面的postgres是本地登录执行的用户名,option里存储的是远程的用户密码
createusermappingforpostgresserverserver_remote_rudy_01options(user‘vsphere',password‘viadmin');
4本地创建外部表,指定server
CREATEFOREIGNTABLEv1_cost(sample_timeTIMESTAMP,datacenter_idint4,host_idint4,costNUMERIC)serverserver_remote_rudy_01options(schema_name‘public',table_name‘vi_cost');
5–导入指定的表,也可以不导入指定的表,也可以导入整个schema下面的表(可有可无的一步)
IMPORTFOREIGNSCHEMApublicFROMSERVERserver_remote_rudy_01INTOpublic; IMPORTFOREIGNSCHEMApubliclimitto(t1)FROMSERVERserver_remote_rudy_01INTOpublic;
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。