视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Postgresql9.3外部数据封装的新功能
2020-11-09 07:49:08 责编:小采
文档


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 ,如果映射的用户有这个权限的话。

下载本文
显示全文
专题