仲介交易 HTTP://www.aliyun.com/zixun/aggregation/6858.html">SEO診斷 淘寶客 雲主機 技術大廳
這周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」,說明安裝成功。
第二步:創建遠端資料庫伺服器
先在遠端資料庫vm05中新建資料庫zhang和資料表world。
postgres=# create database zhang ;
postgres=# c zhang
zhang=# create table world (greeting text) ;
然後psql登陸本機資料庫創建vm05-zhang
postgres=# create server vm05_zhang foreign data wrapper postgres_fdw options (host '192.168.0.235',dbname 'zhang',port '3 500') ;
create server命令語法:
CREATE SERVER server_name [ TYPE 'server_type' ] [ VERSION 'server_version' ] FOREIGN DATA WRAPPER fdw_name [ OPTIONS ( op tion 'value' [, ... ] ) ]
server_name:遠端資料庫的名稱,在一個資料庫中必須是唯一的。
server_type、server_version:可選,可能對一些外部資料封裝有用。
fdw_name:外部資料分裝名字,這裡我們是postgres_fdw。
options:其他可選參數,包括資料庫位址,資料庫名稱和埠等。
第三步:創建映射使用者
CREATE USER MAPPING指定連接遠端資料庫的使用者,這些資料和創建的foreign server遠端伺服器一起被封裝起來。 擁有foreign server許可權的使用者可以創建映射使用者。
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是根據名字來匹配的。
postgres=# create foreign table vm05_world (greeting text) server vm05_zhang options (table_name 'world') ;
第五步:查看效果
在vm05_world表中插入三條資料
postgres=# insert into vm05_world values ('Take me to your leader') ;
postgres=# insert into vm05_world values ('Take me to your leader.........') ;
postgres=# insert into vm05_world values ('Hello World!!!!!') ;
查看vm05_world表中資料
postgres=# select * from vm05_world ;
greeting
---------------------------------
Take me to your leader
Take me to your leader.........
Hello World!!!!!
(3 rows)
其實這個是在vm05這台伺服器上,我們登陸vm05查看是否有資料。
zhang=# select * from world ;
greeting
---------------------------------
Take me to your leader
Take me to your leader.........
Hello World!!!!!
(3 rows)
可以看到插入資料成功,當然我們也可以在update和delete from表vm05_world ,如果映射的使用者有這個許可權的話。
至此postgres_fdw外部資料封裝可寫正式測試完成,對於操作多張表很有用。 總結的比較粗淺,還有不明白的可以參考postgresql的官方文檔:
HTTPs://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.3#Writeable_Foreign_Tables