source_db=> /c francs postgres francs=# CREATE SERVER srv_source_db FOREIGN DATA WRAPPER postgres_fdw francs-# OPTIONS (host '127.0.0.1', port '1925', dbname 'source_db'); CREATE SERVER francs=# grant usage on foreign server srv_source_db to francs; GRANT
2.3 CREATE MAPPING USER
1 2 3
francs=# CREATEUSERMAPPINGFOR francs SERVER srv_source_db francs-# OPTIONS (user'source_db', password'source_db'); CREATEUSERMAPPING
2.4 创建外部表
1 2 3 4 5 6 7
francs=> CREATE FOREIGN TABLE ft_test_1 ( francs(> id integer , francs(> name character varying(32), francs(> amount numeric ) francs-> SERVER srv_source_db francs-> OPTIONS (schema_name 'source_db',table_name 'test_1'); CREATEFOREIGNTABLE
2.5 查询测试
1 2 3 4
francs=> select * from ft_test_1; ERROR: password is required DETAIL: Non-superuser cannot connect if the server does not request a password. HINT: Target server s authentication method must be changed.
# IPv4 local connections: host source_db source_db 127.0.0.1/32 md5 host all all 127.0.0.1/32 trust
2.6 再次查询测试
1 2 3 4 5 6 7
francs=> select * from ft_test_1; id | name | amount ----+------+-------- 1 | a | 100 2 | b | 200 3 | c | 300 (3 rows)
备注:以上已经安装并配置好了 postgres_fdw ,接着测试外部表的可写情况。
外部表可写测试
3.1 插入测试 3.1.1 francs 库增加一条数据
1 2 3 4 5 6 7 8 9 10 11
francs=> insert into ft_test_1 values (4,'d',400); INSERT 01 francs=> select * from ft_test_1; id | name | amount ----+------+-------- 1 | a | 100 2 | b | 200 3 | c | 300 4 | d | 400 (4 rows)
3.1.2 source_db 库验证
1 2 3 4 5 6 7 8 9 10 11
francs=> /c source_db source_db You are now connected to database "source_db" as user "source_db". source_db=> select * from test_1; id | name | amount ----+------+-------- 1 | a | 100 2 | b | 200 3 | c | 300 4 | d | 400 (4 rows)
备注:验证 OK。
3.2 删除测试 3.2.1 francs 库删除一条数据
1 2 3 4 5 6 7 8 9 10
francs=> delete from ft_test_1 where id=1; DELETE 1 francs=> select * from ft_test_1 ; id | name | amount ----+------+-------- 2 | b | 200 3 | c | 300 4 | d | 400 (3 rows)
3.2.2 source_db 库验证
1 2 3 4 5 6 7 8 9 10
francs=> /c source_db source_db; You are now connected to database "source_db" as user "source_db". source_db=> select * from test_1 ; id | name | amount ----+------+-------- 2 | b | 200 3 | c | 300 4 | d | 400 (3 rows)
francs=> begin; BEGIN francs=> insert into ft_test_1 values (5,'e',500); INSERT 01 francs=> select * from ft_test_1; id | name | amount ----+------+-------- 3 | c | 300 4 | d | 400 2 | b | 2000 5 | e | 500 (4 rows) francs=> rollback; ROLLBACK francs=> select * from ft_test_1; id | name | amount ----+------+-------- 3 | c | 300 4 | d | 400 2 | b | 2000 (3 rows)