好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Postgresql 跨库同步表及postgres_fdw的用法说明

postgres_fdw模块

?

1

PostgreSQL 9.3 add postgres_fdw extension for accessing remote tables

PostgreSQL 9.3新增了一个postgres_fdw模块, 已经整合在源码包中. 用于创建postgres外部表.

注:db_des为目标库,developer_month_orders_data为表名。意思就是从查询库a中建立同名FOREIGN关联表,

可以查询目标库中的数据。以下命令在需要建立的关联库中执行。

目标库中的表必须存在,也就是先建立好,否则从a库,查询会报找不到表错误

阿里云RDS,数据库:PostgreSQL 9.4,跨实例数据库不支持postgres_fdw建立外部表,坑啊!

阿里云技术回复RDS需要10.0版本的 postgresql才支持跨实例。不然只能同一个实例下的不同数据库之间的外部表。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

-- 安装 postgres_fdw 插件

CREATE EXTENSION postgres_fdw;

 

-- 创建远程服务

CREATE SERVER remote_server FOREIGN DATA WRAPPER postgres_fdw;

 

-- 查看远程服务

select * from pg_foreign_server ;

 

-- 修改远程服务

alter server remote_server options ( add hostaddr '11.216.10.215' ,

        add port '5432' , add dbname 'db_des' );

 

-- SERVER赋权

grant usage on foreign server remote_server to postgres;

 

-- 在本地数据库中创建user mapping

CREATE USER MAPPING FOR postgres server remote_server options ( user 'postgres' , password 'xxxxx' );

 

-- 同样创建枚举

CREATE TYPE db_enum AS ENUM ( 'postgres' , 'sqlserver' , 'mysql' );

 

-- 查看枚举类型的oid

select oid from pg_type where typname= 'db_enum' ;

 

-- 创建外部表developer_month_orders_data

CREATE FOREIGN TABLE developer_month_orders_data(

  id integer not null ,

  developer_user_id integer ,

  package_id integer ,

  order_month date ,

  create_datetime timestamp

) SERVER remote_server options (schema_name 'public' ,table_name 'developer_month_orders_data' );

 

-- 查看外部表

select * from developer_month_orders_data;

ddl维护操作:

?

1

2

3

4

drop user mapping for postgres server server_remote ;

drop server server_remote;

drop extension postgres_fdw ;

drop foreign table test1;

补充:postgresql postgres_fdw 跨库 查询

1 安装扩展

?

1

create extension postgres_fdw;

2 本地创建server并查看 该server作用是在本地配置一个连接远程的信息,下面的配置是要连接到远程DB名称是postgres数据库

?

1

create server server_remote_rudy_01 foreign data wrapper postgres_fdw options(host ‘192.168.11.44 ',port ‘5432' ,dbname ‘vsphere_info');

查询:

?

1

select * from pg_foreign_server ;**

3 创建用户匹配信息并查看,在本地

for后面的postgres是本地登录执行的用户名,option里存储的是远程的用户密码

?

1

create user mapping for postgres server server_remote_rudy_01 options( user ‘vsphere ',password ‘viadmin' );

4 本地创建外部表,指定server

?

1

CREATE FOREIGN TABLE v1_cost(sample_time TIMESTAMP ,datacenter_id int4,host_id int4 ,cost NUMERIC ) server server_remote_rudy_01 options (schema_name ‘ public ',table_name ‘vi_cost' );

5 –导入指定的表,也可以不导入指定的表,也可以导入整个schema下面的表(可有可无的一步)

?

1

2

IMPORT FOREIGN SCHEMA public FROM SERVER server_remote_rudy_01 INTO public ;

IMPORT FOREIGN SCHEMA public limit to (t1) FROM SERVER server_remote_rudy_01 INTO public ;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/fsstyle/article/details/87697610

查看更多关于Postgresql 跨库同步表及postgres_fdw的用法说明的详细内容...

  阅读:65次