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 クローンで立ち往生しています。それを取得するには:

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 に答える