PostgreSQL数据库dblink和postgres_fdw扩展使用比较

在以前的两篇文章中,章郎虫分别介绍了dblinkpostgres_fdw两个扩展。今天我在这里初略地说下使用dblink和postgres_fdw后的实际感觉和区别。 html

postgres_fdw远程可写功能是9.3版本出来后才新加的,而dblink也能够在之前的postgresql版本中使用。在使用过程当中,我把postgres_fdw安装在9.3,dblink安装在9.2.4,而远程链接的都是9.2.4版本的数据库。 sql

首先在安装方面基本都差很少,能够用create extension dblink和create extension postgres_fdw分别安装。 数据库

而后比较他们的使用方法。在开始使用dblink以前,首先须要链接远程数据库,而后按照格式编写sql进行查询等操做。这里须要注意,在sql中须要把远程表的字段和类型在本地从新命名,否则sql会报错。这个章郎虫在一开始使用的时候以为很不方便,并且若是每次查询一张表都要在sql中命名字段和类型实际上是很糟糕的,不过幸亏能够配置视图把sql“封装”起来。 安全

1 select dblink_connect('myconn', 'host=XXX.XXX.XXX.XXX port=XX dbname=postgres user=myname password=mypassword');
2 select * from dblink('myconn','select * from mytable') as t(a int, b text, c text[]) where a>XX ;
3 create view myremote_table as select * from dblink('myconn','select * from mytable') as t(a int, b text, c text[]) ;
4 select * from myremote_table where a>XX ;
5 select dblink_disconnect('myconn') ;

以上是dblink的基本用法,接下来讲下postgres_fdw。第一步建立远程服务器,这里须要定义主机地址,数据库名和端口。第二步指定链接远程数据库的用户,和建立的远程服务器一块儿封装。第三步建立远程表,这里也须要把远程表的字段和类型都列一下。第四步和操做本地表同样操做远程表。 服务器

1 create server vm05_zhang foreign data wrapper postgres_fdw options (host '192.168.0.235',dbname 'zhang',port '3500') ;
2 create user mapping FOR PUBLIC server vm05_zhang options (password 'xxx') ;
3 create foreign table vm05_world (greeting text) server vm05_zhang options (table_name 'world') ;
4 select * from vm05_world ;

最后在使用时章郎虫还发现dblink在运行数据量大的sql时容易丢失远程链接,致使查询或者更新失败,而postgres_fdw不会出现丢失链接的状况。另外dblink须要先链接才能够查询,我以为在脚本中运用也没有那么方便。若是让帐号密码明文显示,对数据库的安全来讲也不是一个好选择。不过这个版本的postgres_fdw和dblink同样,都还不能对远程表的数据量实际估算,join表时也不会进行优化,因此远程操做时最好仍是单表操做。 app

上面是章郎虫的实际使用感觉,了解的很浅,总之我的感受和dblink比起来,postgres_fdw方便多了。 post

参考: 优化

dblink:http://www.sijitao.net/1368.html spa

postgres_fdw:http://www.sijitao.net/1434.html .net

相关文章
相关标签/搜索