Postgresql 9.3外部數據封裝的新功能

這周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。
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命令語法: 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') ;

第五步:查看效果

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 ,若是映射的用戶有這個權限的話。

至此postgres_fdw外部數據封裝可寫正式測試完成,對於操做多張表頗有用。總結的比較粗淺,還有不明白的能夠參考postgresql的官方文檔:

https://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.3#Writeable_Foreign_Tables

原文連接:http://www.sijitao.net/1434.html

相關文章
相關標籤/搜索