>  기사  >  데이터 베이스  >  Postgresql 9.3外部数据封装的新功能

Postgresql 9.3外部数据封装的新功能

WBOY
WBOY원래의
2016-06-07 15:21:511079검색

Postgresql 9.3外部数据封装的新功能 这周postgresql发布了9.3正式版,该版本包含可写的外部数据封装、数据页 checksums、快速的故障转移以及 streaming-only remastering 等等。很荣幸,公司第一时间让我试下外部数据分装可写的这个功能。原来postgresql 9

Postgresql 9.3外部数据封装的新功能

 

这周postgresql发布了9.3正式版,该版本包含可写的外部数据封装、数据页 checksums、快速的故障转移以及 streaming-only remastering 等等。很荣幸,公司第一时间让我试下外部数据分装可写的这个功能。原来postgresql 9提供可远程读取数据库的功能,现在正是加入远程可写。所以通过fdw(Foreign Data Wrappers),简单讲可以让我们在本地数据库操作远程数据库了。这和之前介绍的dblink有相似之处,但是fdw提供更多透明和标准的语法,而且性能也比dblink好。

 

第一步:安装postgres_fdw扩展

 

postgres=# create extension postgres_fdw;

 

如果提示“CREATE EXTENSION”,说明安装成功。

 

第二步:创建远程数据库服务器

 

01 //先在远程数据库vm05中新建数据库zhang和数据表world。

02

03 postgres=# create database zhang ;

04

05 postgres=# \c zhang

06

07 zhang=# create table world (greeting text) ;

08

09 //然后psql登陆本地数据库创建vm05-zhang

10

11 postgres=# create server vm05_zhang foreign data wrapper postgres_fdw options (host '192.168.0.235',dbname 'zhang',port '3500') ;

create server命令语法:

 

CREATE SERVER server_name [ TYPE 'server_type' ] [ VERSION 'server_version' ] FOREIGN DATA WRAPPER fdw_name [ OPTIONS ( option 'value' [, ... ] ) ]

 

server_name:远程数据库的名称,在一个数据库中必须是唯一的。

 

server_type、server_version:可选,可能对一些外部数据封装有用。

 

fdw_name:外部数据分装名字,这里我们是postgres_fdw。

 

options:其他可选参数,包括数据库地址,数据库名称和端口等。

 

第三步:创建映射用户

 

CREATE USER MAPPING指定连接远程数据库的用户,这些数据和创建的foreign server远程服务器一起被封装起来。拥有foreign server权限的用户可以创建映射用户。

 

1 postgres=# create user mapping FOR PUBLIC server vm05_zhang options (password 'xxx') ;

create user mapping命令语法:

 

CREATE USER MAPPING FOR { user_name | USER | CURRENT_USER | PUBLIC }

SERVER server_name

[ OPTIONS ( option 'value' [ , ... ] ) ]

 

user_name:现有的用户映射到远程server。USER和CURRENT_USER匹配当前的用户,没有特定用户可用就可以选择PUBLIC。

 

server_name:当前需要用户映射到的远程数据库服务器名,第二步已经创建。

 

options:其他可选像,包括用户名、密码等。

 

例如:CREATE USER MAPPING FOR bob SERVER foo OPTIONS (user ‘bob’, password ‘secret’);

 

第四步:创建远程表

 

这里需要注意,创建表的列要和远程表的列要匹配,类型最好是一样。远程表的列可以少些,顺序可以不重要,因为fdw是根据名字来匹配的。

 

1 postgres=# create foreign table vm05_world (greeting text) server vm05_zhang options (table_name 'world') ;

第五步:查看效果

 

01 //在vm05_world表中插入三条数据

02

03 postgres=# insert into vm05_world values ('Take me to your leader') ;

04

05 postgres=# insert into vm05_world values ('Take me to your leader.........') ;

06

07 postgres=# insert into vm05_world values ('Hello World!!!!!') ;

08

09 //查看vm05_world表中数据

10

11 postgres=# select * from vm05_world ;

12  greeting

13 ---------------------------------

14  Take me to your leader

15  Take me to your leader.........

16  Hello World!!!!!

17 (3 rows)

18

19 //其实这个是在vm05这台服务器上,我们登陆vm05查看是否有数据。

20

21 zhang=# select * from world ;

22  greeting

23 ---------------------------------

24  Take me to your leader

25  Take me to your leader.........

26  Hello World!!!!!

27 (3 rows)

可以看到插入数据成功,当然我们也可以在update和delete from表vm05_world ,如果映射的用户有这个权限的话。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.