dblink_open - открывает курсор на таблице на внешнем сервере PostgreSQL
Синтаксис
Описание
dblink_open открывает курсор на внешней базе данных, который впоследствии может быть использован в функциях dblink_fetch и dblink_close.
Это значит, что по сути запрос мы отправили, но данные не получили, так как выбирать их будем позднее, что удобно если скажем, мы выбираем эти строки в стороннем цикле, как показано в примере (2):
Аргументы
имя соединения - не обязательный текстовый параметр, имя подключения dblink. Если же данный параметр опущен, то запрос отправляется на неименованную подключенную внешнюю базу данных;
имя курсора - обязательный параметр, имя курсора;
SQL запрос - обязательный параметр, SELECT запрос к внешней базе данных;
остановка в случае ошибки - не обязательный логический параметр, Если он указан как TRUE (что является умолчательным значением когда данный параметр опущен), то ошибка возвращаемая в случае неправильного выполнения удаленного запроса применяется и локально, при FALSE же ошибка выводится только лишь в качестве уведомления, а функция возвращает 0 строк.
Возвращаемые данные
Возвращает статус, либо 'ОК' или ошибку.
Примечание
Поскольку курсор может сохраняться только в течение транзакции, dblink_open запускает блока транзакции (BEGIN) на удаленной машине, если удаленная сторона в данный момент не находится в другом блоке транзакции. Эта тразакция будет закрыта, когда мы выполним соответствующее dblink_close. Замечу, что если вы используете dblink_exec для изменения данных между dblink_open и dblink_close или вы используете dblink_disconnect до dblink_close, то ваши изменения будут потеряны, так как тразнакция будет прервана. Кстати, это видно в примере (2), вставка записей в таблицу возможна только после того как курсор на ней закрыт.
Имена курсоров уникальны в пределах отдельного соединения, то есть могут сущестовать два курсора с одинаковыми именами, но для разных соединений.