注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL 9.3Beta1:支持可写的外部表(Writeable Foreign Tables)  

2013-05-15 13:59:34|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

          PostgreSQL 9.3 新增的一个主要特性是支持可写的外部表 (foreign tables),而在 9.3 版本
之前外部表只读,关于外部表的使用可以参考之前的 blog:

file_fdw    

       在之前版本要实现跨库操作,一般通过 dblink 或者 pgsql_fdw ,而 dblink 用起来非常不方便;
9.3 版本支持外部表可写,对跨库操作的支持进一步提升,越来越像 oracle 的 dblink 了,接下来演
示下:

一 源库数据准备
 [pg93@redhatB pg_root]$ psql source_db source_db
psql (9.3beta1)
Type "help" for help.

source_db=> create table test_1 (id int4 primary key ,name varchar(32),amount numeric);
CREATE TABLE

source_db=> insert into test_1 values (1,'a',100);
INSERT 0 1
source_db=> insert into test_1 values (2,'b',200);
INSERT 0 1
source_db=> insert into test_1 values (3,'c',300);
INSERT 0 1

source_db=> select * from test_1;
 id | name | amount 
----+------+--------
  1 | a    |    100
  2 | b    |    200
  3 | c    |    300
(3 rows)
   

二 安装并配置 postgres_fdw
--2.1 安装 postgres_fdw
 francs=# create extension postgres_fdw;
CREATE EXTENSION
 备注:详细内容参考之前的 blog:  PostgreSQL 9.3Beta1: 新增 postgres_fdw 外部模块。  
 
--2.2 creater server 并赋权
 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 
 francs=# CREATE USER MAPPING FOR francs SERVER srv_source_db
francs-# OPTIONS (user 'source_db', password 'source_db');
CREATE USER MAPPING
   

--2.4 创建外部表 
 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');
 CREATE FOREIGN TABLE
   
--2.5 查询测试
 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.
   
备注:如果遇到这个错误,在 pg_hba.conf 增加一条策略:红色那条为新增,文件内容未全部列出。修改之后执行 pg_ctl reload 命令。

 # 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 再次查询测试
 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 库增加一条数据
 francs=> insert into ft_test_1 values (4,'d',400);
INSERT 0 1

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 库验证
 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 库删除一条数据
 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 库验证
 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)
   备注:验证 OK。同理 update 测试也正常,这里不介绍了。
  

四 事务测试
 francs=> begin;
BEGIN
francs=> insert into ft_test_1 values (5,'e',500);
INSERT 0 1

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)
 备注:远程操作依然支持事务。
  
五 参考

pgsql_fdw    


  评论这张
 
阅读(9197)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016