PostgreSQL DBlink с именованными соединениями - PullRequest
5 голосов
/ 26 марта 2012

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

Возвращает: два столбца, как и ожидалось.

Именованный не работает:

Connect:

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

Disconnect:

SELECT dblink_disconnect('myconn');

Возвращает:

ERROR:  connection "myconn" not available

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

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

Безымянный с _connect и _disconnect не работает:

Connect:

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

Disconnect:

SELECT dblink_disconnect();

Возвращает:

ERROR:  connection not available

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

ERROR: connection not available
SQL state: 08003

1 Ответ

2 голосов
/ 26 марта 2012

У меня есть рабочая установка с неназванными соединениями.

То, что вы называете " Безымянный " в вашем вопросе, на самом деле имеет параметр name. Вы путаете два варианта там. Попробуйте это без '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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...