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

相關文章
相關標籤/搜索