PostgreSQL dblink与命名连接

ben*_*diy 5 postgresql connection session dblink

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);
Run Code Online (Sandbox Code Playgroud)

返回:按预期方式返回两列.

命名不起作用:

连接:

SELECT dblink_connect('myconn'
           ,'dbname=testdb port=5432 host=192.168.1.1 user=usr password=pw');
Run Code Online (Sandbox Code Playgroud)

返回:"OK"

查询:

SELECT testtable.* FROM dblink('myconn', 'SELECT * FROM testtable')
AS     testtable(testtable_id integer, testtable_name text);
Run Code Online (Sandbox Code Playgroud)

返回:

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
Run Code Online (Sandbox Code Playgroud)

断开:

SELECT dblink_disconnect('myconn');
Run Code Online (Sandbox Code Playgroud)

返回:

ERROR:  connection "myconn" not available

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

ERROR: connection "myconn" not available
SQL state: 08003
Run Code Online (Sandbox Code Playgroud)

未命名_connect和_disconnect不起作用:

连接:

SELECT dblink_connect('dbname=testdb port=5432 host=192.168.1.1
                                               user=usr password=pw');
Run Code Online (Sandbox Code Playgroud)

返回:"OK"

查询:

SELECT testtable.* FROM dblink('SELECT * FROM testtable')
AS testtable(testtable_id integer, testtable_name text);
Run Code Online (Sandbox Code Playgroud)

返回:

ERROR:  connection not available

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

ERROR: connection not available
SQL state: 08003
Run Code Online (Sandbox Code Playgroud)

断开:

SELECT dblink_disconnect();
Run Code Online (Sandbox Code Playgroud)

返回:

ERROR:  connection not available

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

ERROR: connection not available
SQL state: 08003
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 4

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

您在问题中所说的“未命名”实际上有一个名称参数。您混淆了这两个变体。尝试不使用'myconn'

SELECT *
FROM   dblink('SELECT * FROM testtable'
        ) AS testtable (testtable_id integer, testtable_name text);
Run Code Online (Sandbox Code Playgroud)

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


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

该错误消息暗示 dblink 需要一个connstr. 只有当第一个参数connname与存在的任何参数都不匹配时,才会发生这种情况简而言之:'myconn'未找到连接 - 这让我怀疑您没有dblink()在与相同的会话dblink_connect()中进行调用。