dblink
Подключение к другим базам данных из сеанса базы данных.
Связанные компоненты: pg_profile для использования доработанной функциональности.
Схема размещения:
ext
.Модуль обеспечивает подключения к другим базам данных из сеанса базы данных при помощи набора функций:
Функция | Описание |
---|---|
dblink_connect | Устанавливает подключение к удаленной базе данных PostgreSQL. Целевой сервер и база данных указываются в стандартной строке подключения libpq . Если требуется, этому подключению можно назначить имя. В один момент времени могут быть открытыми несколько именованных подключений, но только одно подключение без имени. Подключение будет сохраняться, пока не будет закрыто или до завершения сеанса базы данных |
dblink_connect_u | Открывает постоянное подключение к удаленной базе данных. Необходимо внимательно и осторожно пользоваться этой функцией, поскольку это небезопасно. Функция dblink_connect_u() не отличается от dblink_connect() , за исключением того, что она позволяет подключаться с любым методом аутентификации обычным пользователям |
dblink_disconnect | Закрывает подключение, ранее открытое функцией dblink_connect() . Форма без аргументов закрывает безымянное подключение |
dblink | Выполняет запрос в удаленной базе данных. Обычно выполняется SELECT , но это может быть и любой другой возвращающий строки оператор SQL |
dblink_exec | Выполняет команду в удаленной базе данных. Это может быть любой не возвращающий строки оператор SQL |
dblink_open | Открывает курсор в удаленной базе данных. Открытым курсором можно манипулировать функциями dblink_fetch() и dblink_close() |
dblink_fetch | Возвращает строки из курсора, ранее открытого функцией dblink_open() |
dblink_close | Закрывает курсор, ранее открытый функцией dblink_open() |
dblink_get_connections | Возвращает имена всех открытых именованных подключений dblink или NULL , если они отсутствуют |
dblink_error_message | Возвращает самое последнее сообщение ошибки для заданного именованного удаленного подключения или OK , если в сеансе этого подключения не было ошибок |
dblink_send_query | Передает в удаленную базу данных запрос для асинхронного выполнения, то есть не дожидается получения результата. С этим подключением не должен быть связан уже выполняющийся асинхронный запрос |
dblink_is_busy | Проверяет, не выполняется ли через заданное именованное удаленное подключение асинхронный запрос |
dblink_get_notify | Выдает асинхронные уведомления подключения |
dblink_get_result | Получает результаты асинхронного запроса, запущенного ранее вызовом dblink_send_query , и будет ожидать завершения выполнени запроса |
dblink_cancel_query | Отменяет или пытается отменить любой запрос, который выполняется через заданное подключение. Вызов функции не обязательно будет успешным, например, потому что удаленный запрос уже завершился. Запрос отмены просто увеличивает вероятность того, что выполняющийся запрос будет вскоре прерван. При этом все равно нужно завершить обычную процедуру обработки запроса, например, вызвать dblink_get_result . Возвращает OK , если запрос отмены был отправлен, либо текст сообщения об ошибке в случае неудачи |
dblink_get_pkey | Возвращает позиции и имена полей первичного ключа отношения в локальной базе данных |
dblink_build_sql_insert | Формирует оператор INSERT из локального кортежа, заменяя значения полей первичного ключа переданными альтернативными значениями. Функция может быть полезна при избирательной репликации локальной таблицы с удаленной базой данных. Функция выбирает строку из локальной таблицы по заданному первичному ключу, а затем формирует SQL-команду INSERT , дублирующую эту строку, но заменяет в ней значения первичного ключа данными из последнего аргумента |
dblink_build_sql_delete | Формирует оператор DELETE со значениями, передаваемыми для полей первичного ключа. Функция может быть полезна при избирательной репликации локальной таблицы с удаленной базой данных |
dblink_build_sql_update | Формирует оператор UPDATE из локального кортежа, заменяя значения полей первичного ключа переданными альтернативными значениями. Функция может быть полезна при избирательной репликации локальной таблицы с удаленной базой данных |
Свойства функций и их аргументов, примеры использования можно найти в документации: https://www.postgresql.org/docs/13/dblink.html.
-
Функция
dblink_connect_se
устанавливается в специальную схемуpgse_profile
. -
Отличия параметров адреса сервера в аргументе
connstr
для функций:Параметр dblink_connect
dblink_connect_se
host
IP-адрес IP-адрес или FQDN hostaddr
IP-адрес не используется
-
Стандартная функция
dblink_connect
. Создать именованное подключение:SELECT dblink_connect('myTest2', 'hostaddr=<IP-адрес> port=5433 dbname=test1 user=user1 password=<password> options=-csearch_path=ext');
Пример вывода результата:Раскрыть type=sqldblink_connect ---------------- OK (1 row)
-
Функция
dblink
:SELECT * FROM dblink('myTest2', 'SELECT * FROM mdt') AS t(a_int int, b_text text, c_time timestamp);
Пример вывода результата SQL-запроса:Раскрыть type=sqla_int | b_text | c_time -------+--------+---------------------------- 4 | fourth | 2023-02-21 13:20:57.977069 11 | first | 2023-02-21 13:22:30.738639 22 | second | 2023-02-21 13:22:30.743876 33 | third | 2023-02-21 13:22:31.993623 (4 rows)
-
Стандартная функция
dblink_connect
с использованием параметраhost
вместоhostaddr
в аргументеconnstr
:SELECT dblink_connect('myTest3', 'host=<IP-адрес> port=5433 dbname=test1 user=user1 password=<password> options=-csearch_path=ext');
Пример вывода результата:Раскрыть type=sqldblink_connect ---------------- OK (1 row)
-
Доработанная функция
dblink_connect_se
. Создать схемуpgse_profile
:CREATE SCHEMA pgse_profile;
Установить необходимые дополнительные расширения –pg_profile
,pg_stat_statements
:CREATE EXTENSION IF NOT EXISTS pg_stat_statements SCHEMA ext; CREATE EXTENSION IF NOT EXISTS pg_profile SCHEMA pgse_profile;
Добавить данные аутентификации пользователя базы данных в шифрованное хранилище паролей:pg_auth_config add --host <FQDN_hostname-OR-IPaddress> --port 5433 --database test1 --user user1
По запросу утилиты ввести интерактивно дважды пароль пользователя.Раскрыть type=bashenter password: ******************* confirm password: *******************
В случае успешного завершения утилита выдает сообщение:Going to add auth record for user: "user1", host: "<FQDN_hostname-OR-IPaddress>", port: "5433", database: "test1" new record added
Проверка корректности записи в хранилище паролей:pg_auth_config check | grep user1
Успешный результат - OK:Connection settings for host: "<FQDN_hostname-OR-IPaddress>", port "5433", database "test1", user "user1" are OK
Создание подключенийdblink
функциейdblink_connect_se
с использованием хранилища паролей:-
подключение
myTestNew1
:SELECT pgse_profile.dblink_connect_se('myTestNew1','host=<FQDN_hostname> port=5433 dbname=test1 user=user1');
-
подключение
myTestNew2
:SELECT pgse_profile.dblink_connect_se('myTestNew2','host=<IPaddress> port=5433 dbname=test1 user=user1 options=-csearch_path=ext');
Успешный результат - OK:Раскрыть type=bashdblink_connect_se ------------------- OK (1 row)
-
-
Функция
dblink
:SELECT * FROM dblink('myTestNew2', 'SELECT * FROM mdt') AS t(a_int int, b_text text, c_time timestamp);
Пример вывода результата SQL-запроса:Раскрыть type=basha_int | b_text | c_time -------+--------+---------------------------- 4 | fourth | 2023-02-21 13:20:57.977069 11 | first | 2023-02-21 13:22:30.738639 22 | second | 2023-02-21 13:22:30.743876 33 | third | 2023-02-21 13:22:31.993623 (4 rows)
-
Функция
dblink_get_connections
выводит имена всех именованных подключений, которые были созданы на данном сервере:SELECT dblink_get_connections();
Пример вывода списка именованных подключений:Раскрыть type=bashdblink_get_connections ------------------------- {myTestNew1,myTestNew2} (1 row)
Дополнительную информацию по поставляемому модулю dblink можно получить по ссылке.