8

dblinkリモートサーバーへの名前付き接続または名前なし接続を使用して切断すると、動作しないようです。dblink() で接続文字列を使用して名前のない接続を使用すると、正常に動作します。うまく接続しているように見えますが、使用しようとすると接続できません。名前付き接続でこれを機能させる方法についてのアイデアはありますか?

名前のない connstr で正常に動作します:

SELECT testtable.*
FROM   dblink('dbname=testdb port=5432 host=192.168.1.1 user=usr password=pw'
             ,'SELECT * FROM testtable')
AS     testtable(testtable_id integer, testtable_name text);

戻り値: 予想どおり 2 列。

名前付きが機能しない:

接続:

SELECT dblink_connect('myconn'
           ,'dbname=testdb port=5432 host=192.168.1.1 user=usr password=pw');

戻り値: 「OK」

クエリ:

SELECT testtable.* FROM dblink('myconn', 'SELECT * FROM testtable')
AS     testtable(testtable_id integer, testtable_name text);

戻り値:

ERROR:  could not establish connection
DETAIL:  missing "=" after "myconn" in connection info string

********** Error **********

ERROR: could not establish connection
SQL state: 08001
Detail: missing "=" after "myconn" in connection info string

切断:

SELECT dblink_disconnect('myconn');

戻り値:

ERROR:  connection "myconn" not available

********** Error **********

ERROR: connection "myconn" not available
SQL state: 08003

_connect と _disconnect を使用した名前なしは機能しません:

接続:

SELECT dblink_connect('dbname=testdb port=5432 host=192.168.1.1
                                               user=usr password=pw');

戻り値: 「OK」

クエリ:

SELECT testtable.* FROM dblink('SELECT * FROM testtable')
AS testtable(testtable_id integer, testtable_name text);

戻り値:

ERROR:  connection not available

********** Error **********

ERROR: connection not available
SQL state: 08003

切断:

SELECT dblink_disconnect();

戻り値:

ERROR:  connection not available

********** Error **********

ERROR: connection not available
SQL state: 08003
4

1 に答える 1

4

名前のない接続で動作するセットアップがあります。

質問で「名前なし」と呼んでいるものには、実際には名前パラメータが含まれています。そこでは、2つのバリアントを混同しています。なしで試してみてください'myconn'

SELECT *
FROM   dblink('SELECT * FROM testtable'
        ) AS testtable (testtable_id integer, testtable_name text);

また、接続の確立と使用は同じセッションで行う必要があることを忘れないでください。


しかし、私は正直なところ、あなたの名前付き接続の何が問題になっているのかを見つけることができません。私はいくつかのテストを実行しましたが、すべてが正しいように見えます。PostgreSQL9.1でテストしました。

エラーメッセージは、dblinkがを予期していることを示していconnstrます。これは、最初のパラメーターが存在するパラメーターと一致しない場合にのみ発生します。つまりconnname、接続が見つかりません。これにより、と同じセッション'myconn'で呼び出していないことが疑われます。dblink()dblink_connect()

于 2012-03-26T18:01:52.307 に答える