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);

返回:预期的两列。

命名不起作用:

连接:

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

返回:“确定”

询问:

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');

返回:“确定”

询问:

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

我有一个带有未命名连接的工作设置。

您在问题中所谓的“未命名”实际上有一个名称参数。您在那里混淆了这两个变体。试试没有'myconn'

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

请记住,建立连接和使用它必须发生在同一个会话中。


但老实说,我找不到您命名的连接有什么问题。我已经进行了一些测试,一切看起来都是正确的。我用 PostgreSQL 9.1 进行了测试。

该错误消息暗示 dblink 需要一个connstr. 仅当第一个参数与现有的任何参数都不匹配时才会发生这种情况简而言之connname'myconn'找不到连接-这使我怀疑您没有dblink()dblink_connect().

于 2012-03-26T18:01:52.307 回答