2

我需要访问远程 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;

我不知道要为处理程序和验证器函数做什么,它们是否存在于某个地方?我需要自己写吗?(那会是什么样子?)并且希望对整体方法进行验证。

我确实找到了这个contrib 模块,但它显然不完整。

4

1 回答 1

1

首先,您需要获取pgsql_fdw 代码。我找不到 tarball,所以你被 git clone 卡住了。为拿到它,为实现它:

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 中。

于 2013-04-06T10:25:41.110 回答