这周postgresql发布了9.3正式版,该版本包含可写的外部数据封装、数据页 checksums、快速的故障转移以及 streaming-only remastering 等等。很荣幸,公司第一时间让我试下外部数据分装可写的这个功能。原来postgresql 9提供可远程读取数据库的功能,如今正是加入远程可写。因此经过fdw(Foreign Data Wrappers),简单讲可让咱们在本地数据库操做远程数据库了。这和以前介绍的dblink有类似之处,可是fdw提供更多透明和标准的语法,并且性能也比dblink好。 html
第一步:安装postgres_fdw扩展 sql
postgres=# create extension postgres_fdw; 数据库
若是提示“CREATE EXTENSION”,说明安装成功。 服务器
第二步:建立远程数据库服务器 app
01 |
//先在远程数据库vm05中新建数据库zhang和数据表world。 |
03 |
postgres=# create database zhang ; |
07 |
zhang=# create table world (greeting text) ; |
09 |
//而后psql登录本地数据库建立vm05-zhang |
11 |
postgres=# create server vm05_zhang foreign data wrapper postgres_fdw options (host '192.168.0.235',dbname 'zhang',port '3500') ; |
create server命令语法: post
CREATE SERVER server_name [ TYPE 'server_type' ] [ VERSION 'server_version' ] FOREIGN DATA WRAPPER fdw_name [ OPTIONS ( option 'value' [, ... ] ) ] 性能
server_name:远程数据库的名称,在一个数据库中必须是惟一的。 测试
server_type、server_version:可选,可能对一些外部数据封装有用。 spa
fdw_name:外部数据分装名字,这里咱们是postgres_fdw。 .net
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') ; |
第五步:查看效果
03 |
postgres=# insert into vm05_world values ('Take me to your leader') ; |
05 |
postgres=# insert into vm05_world values ('Take me to your leader.........') ; |
07 |
postgres=# insert into vm05_world values ('Hello World!!!!!') ; |
11 |
postgres=# select * from vm05_world ; |
13 |
--------------------------------- |
14 |
Take me to your leader |
15 |
Take me to your leader......... |
19 |
//其实这个是在vm05这台服务器上,咱们登录vm05查看是否有数据。 |
21 |
zhang=# select * from world ; |
23 |
--------------------------------- |
24 |
Take me to your leader |
25 |
Take me to your leader......... |
能够看到插入数据成功,固然咱们也能够在update和delete from表vm05_world ,若是映射的用户有这个权限的话。
至此postgres_fdw外部数据封装可写正式测试完成,对于操做多张表颇有用。总结的比较粗浅,还有不明白的能够参考postgresql的官方文档:
https://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.3#Writeable_Foreign_Tables
原文连接:http://www.sijitao.net/1434.html