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.
どのようにして接続を開始できますか?
Foouserとしてmwuにログオンするときにパスワードを要求するようにリモートサーバーを構成する必要があります。現在、他の認証方法の1つを使用しています。
クライアント側の問題は、接続文字列にコンマを含めてはならないことです。
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