【问题标题】:PostgreSQL dblink with named connections具有命名连接的 PostgreSQL dblink
【发布时间】:2012-04-10 05:15:30
【问题描述】:

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

【问题讨论】:

    标签: postgresql session connection dblink


    【解决方案1】:

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

    您在问题中所谓的“未命名”实际上有一个名称参数。您在那里混淆了这两个变体。尝试不使用'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()

    【讨论】:

    • 我从未命名部分中删除了“myconn”。我不是故意的。
    • 谢谢。会议似乎是问题所在。在 pgAdmin 的不同窗口中运行查询似乎会将每个窗口视为一个单独的会话。一个接一个地在同一个窗口中运行查询。
    • @bendiy:是的,在 pgAdmin 中,每个 SQL 编辑器窗口都运行一个单独的会话。临时表或 dblink 连接仅在同一窗口(会话)中可见。
    猜你喜欢
    • 2012-12-09
    • 2019-01-17
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    相关资源
    最近更新 更多