2012-07-26 120 views
1

我需要訪問遠程Postgres數據庫中的表。我昨晚花了幾個小時閱讀文檔,而這正是我所想到的。如何創建Postgres到Postgres外部數據表

-- surely this thing is already written somewhere? 
CREATE FUNCTION pgsql_fdw_handler() 
    RETURNS fdw_handler 
    AS '?????' LANGUAGE C STRICT; 

-- surely this thing is already written somewhere? 
CREATE FUNCTION pgsql_fdw_validator(text[], oid) 
    RETURNS void 
    AS '????' LANGUAGE C STRICT; 

CREATE FOREIGN DATA WRAPPER pgsql 
    HANDLER pgsql_fdw_handler 
    VALIDATOR pgsql_fdw_validator; 

CREATE SERVER products_remote FOREIGN DATA WRAPPER pgsql OPTIONS 
    (host 'localhost', dbname 'product_db', port '1234'); 

CREATE USER MAPPING FOR CURRENT_USER 
    SERVER products_remote; 

CREATE FOREIGN TABLE products (
    name text, 
    id integer 
) SERVER products_remote; 

select * from products; 

我不知道如何處理和驗證函數,它們是否存在某處?我需要自己寫嗎? (看起來像什麼?)並且會感謝整體方法的驗證。

我確實發現了this contrib模塊,但它顯然不完整。

+2

dblink模塊更適合:http://www.postgresql.org/docs/current/static/dblink.html – 2012-07-26 16:01:43

+0

謝謝,這就是我所需要的。如果你把它作爲一個真正的答案,我會接受它。 – 2012-07-26 17:49:27

+0

或者我可以回答自己,如果這更方便。 – 2012-07-26 17:50:00

回答

1

首先,您需要獲得pgsql_fdw code。我找不到tarball,所以你被一個git克隆卡住了。爲了得到它:

git clone git://interdbconnect.git.sourceforge.net/gitroot/interdbconnect/interdbconnect 
cd interdbconnect/pgsql_fdw 
make USE_PGXS=1 
make USE_PGXS=1 install; 

然後登錄到pgsql的

CREATE EXTENSION pgsql_fdw; 

create foreign data wrapper postgresql handler pgsql_fdw_handler; 
create server lsmb foreign data wrapper postgresql options (host 'localhost', dbname 'mtech_test', port '5432'); 
create user mapping for current_user server lsmb; 
create foreign table defaults (setting_key text, value text) server lsmb; 
select * from defaults; 

那麼這對我的作品。

我不知道pgsql_fdw是否包含在9.2中的contrib中。

相關問題