web-dev-qa-db-ja.com

AWS / RDSを使用したPostgresからPostgres DBLinkへ

AWS/RDSでPostgres 9.5.2 DBからPostgres 9.52にdblink機能を使用しようとしています。

サーバー上:

CREATE SERVER myremotedb FOREIGN DATA WRAPPER
    dblink_fdw OPTIONS (Host 'myremotedb.123456.eu-west-1.rds.amazonaws.com', port '5432', dbname 'my_db');

CREATE USER MAPPING FOR foouser SERVER myremotedb OPTIONS (user 'foouser', password '1234');

GRANT USAGE ON FOREIGN SERVER myremotedb TO foouser;

クライアント上:

SELECT dblink_connect('myremotedb', 'Host=myremotedb.123456.eu-west-1.rds.amazonaws.com , port=5432 , user=foouser , password=1234 , dbname=my_db');

select * from dblink('myremotedb', 'SELECT * FROM my_data') AS T(id integer, name text);

しかし私が得るものは:

ERROR:  password is required
DETAIL:  Non-superusers must provide a password in the connection string.

どのようにして接続を開始できますか?

4
Randomize

Foouserとしてmwuにログオンするときにパスワードを要求するようにリモートサーバーを構成する必要があります。現在、他の認証方法の1つを使用しています。

1
jjanes

クライアント側の問題は、接続文字列にコンマを含めてはならないことです。

set role = myrole; 
select extension_data.dblink_connect('Host=localhost dbname=db'); --ERROR:  password is required

set role = myrole;
select extension_data.dblink_connect('Host=localhost , dbname=db'); --ERROR:  password is required

set role = myrole; 
select extension_data.dblink_connect('Host=localhost dbname=db user=myrole password=somepass'); --OK

set role = myrole; 
select extension_data.dblink_connect('Host=localhost , dbname=db , user=myrole , password=somepass'); --ERROR:  password is required

set role = postgres;
select extension_data.dblink_connect('Host=localhost dbname=db'); --OK

set role = postgres;
select extension_data.dblink_connect('Host=localhost , dbname=db'); --ERROR:  could not establish connection
0
Dan