我需要访问远程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模块,但它显然是不完整的。
答案 0 :(得分: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中。