dblink
似乎不起作用。如果我在dblink()中使用带有连接字符串的未命名连接,它可以正常工作。它似乎连接正常,但我尝试使用它时我的连接不可用。关于如何使用命名连接的任何想法?
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
连接:
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
答案 0 :(得分:2)
我有一个使用未命名连接的工作设置。
在您的问题中,您称之为“未命名”,其中实际上有一个名称参数。你在混淆这两个变种。不用'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()
。