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.

Ограничения

  1. Функция dblink_connect_se устанавливается в специальную схему pgse_profile.
  2. Отличия параметров адреса сервера в аргументе connstr для функций:
    Параметрdblink_connectdblink_connect_se
    host
    IP-адресIP-адрес или FQDN
    hostaddr
    IP-адресне используется

Использование модуля

  1. Стандартная функция dblink_connect. Создать именованное подключение:
    SELECT dblink_connect('myTest2', 'hostaddr=<IP-адрес> port=5433 dbname=test1 user=user1 password=<password> options=-csearch_path=ext');
    Пример вывода результата:
    Раскрыть type=sql
     dblink_connect
    ----------------
     OK
    (1 row)
    
  2. Функция dblink:
    SELECT * FROM dblink('myTest2', 'SELECT * FROM mdt') AS t(a_int int, b_text text, c_time timestamp);
    Пример вывода результата SQL-запроса:
    Раскрыть type=sql
     a_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)
    
  3. Стандартная функция dblink_connect с использованием параметра host вместо hostaddr в аргументе connstr:
    SELECT dblink_connect('myTest3', 'host=<IP-адрес> port=5433 dbname=test1 user=user1 password=<password> options=-csearch_path=ext');
    Пример вывода результата:
    Раскрыть type=sql
     dblink_connect
    ----------------
     OK
    (1 row)
    
  4. Доработанная функция 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=bash
    enter 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=bash
      dblink_connect_se
      -------------------
      OK
      (1 row)
      
  5. Функция dblink:
    SELECT * FROM dblink('myTestNew2', 'SELECT * FROM mdt') AS t(a_int int, b_text text, c_time timestamp);
    Пример вывода результата SQL-запроса:
    Раскрыть type=bash
     a_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)
    
  6. Функция dblink_get_connections выводит имена всех именованных подключений, которые были созданы на данном сервере:
    SELECT dblink_get_connections();
    Пример вывода списка именованных подключений:
    Раскрыть type=bash
      dblink_get_connections
    -------------------------
     {myTestNew1,myTestNew2}
    (1 row)
    

Ссылки на документацию разработчика

Дополнительную информацию по поставляемому модулю dblink можно получить по ссылке.
Предыдущий раздел
cube
Следующий раздел
dict_int
Была ли страница полезной?