Перейти к основному содержимому

dblink

примечание

Эта страница переведена при помощи нейросети GigaChat.

dblink – выполняет запрос в удаленной базе данных.

Синтаксис

dblink(text connname, text sql [, bool fail_on_error]) returns setof record
dblink(text connstr, text sql [, bool fail_on_error]) returns setof record
dblink(text sql [, bool fail_on_error]) returns setof record

Описание

dblink выполняет запрос (обычно это SELECT, но может быть любое выражение SQL, возвращающее строки) в удаленной базе данных.

Когда передаются два аргумента text, первый из них сначала ищется как имя постоянного соединения. Если найдено, команда выполняется на этом соединении. Если не найдено, первый аргумент обрабатывается как строка информации о подключении для dblink_connect, и указанное соединение устанавливается только на время выполнения этой команды.

Аргументы

connname

: Имя соединения для использования, опустите этот параметр, чтобы использовать неподписанное соединение.

connstr

: Строка информации о соединении, описанная ранее для dblink_connect.

sql

: SQL-запрос, который будет выполняться в удаленной базе данных, например select * from foo.

fail_on_error

: Если истина (по умолчанию при пропуске), то ошибка, возникающая на удаленном конце соединения, вызывает ошибку и локально. Если ложь, удаленная ошибка сообщается локально как УВЕДОМЛЕНИЕ, а функция не возвращает строки.

Возвращаемое значение

Функция возвращает строку (строки), созданную запросом. Поскольку dblink может использоваться с любым запросом, он объявлен для возврата record, а не для указания какого-либо конкретного набора столбцов. Это означает, что необходимо указать ожидаемый набор столбцов в вызывающем запросе – иначе PostgreSQL не будет знать, чего ожидать. Пример:

SELECT *
FROM dblink('dbname=mydb options=-csearch_path=',
'select proname, prosrc from pg_proc')
AS t1(proname name, prosrc text)
WHERE proname LIKE 'bytea%';

Часть «псевдонима» предложения FROM должны указываться имена и типы столбцов, которые функция будет возвращать (фактическое указание имен столбцов в псевдониме является стандартной синтаксической конструкцией SQL, но указание типов столбцов является расширением PostgreSQL). Это позволяет системе понять, каким образом * должно быть развернуто, и к чему относится proname в предложении WHERE, прежде чем пытаться выполнить функцию. Во время выполнения, если фактический результат запроса из удаленной базы данных не содержит того же количества столбцов, что указано в предложении FROM, будет выдано сообщение об ошибке. Однако имена столбцов могут не совпадать, а dblink также не требует точного соответствия типов. Она будет успешно выполнена до тех пор, пока возвращаемые строки данных являются допустимым вводом для типа столбца, объявленного в предложении FROM.

Примечания

Удобный способ использования dblink с заранее определенными запросами – это создание представления. Это позволяет скрыть информацию о типе столбца в представлении, вместо того, чтобы указывать ее в каждом запросе. Например:

CREATE VIEW myremote_pg_proc AS
SELECT *
FROM dblink('dbname=postgres options=-csearch_path=',
'select proname, prosrc from pg_proc')
AS t1(proname name, prosrc text);

SELECT * FROM myremote_pg_proc WHERE proname LIKE 'bytea%';

Примеры

SELECT * FROM dblink('dbname=postgres options=-csearch_path=',
'select proname, prosrc from pg_proc')
AS t1(proname name, prosrc text) WHERE proname LIKE 'bytea%';
proname | prosrc
------------+------------
byteacat | byteacat
byteaeq | byteaeq
bytealt | bytealt
byteale | byteale
byteagt | byteagt
byteage | byteage
byteane | byteane
byteacmp | byteacmp
bytealike | bytealike
byteanlike | byteanlike
byteain | byteain
byteaout | byteaout
(12 rows)

SELECT dblink_connect('dbname=postgres options=-csearch_path=');
dblink_connect
----------------
OK
(1 row)

SELECT * FROM dblink('select proname, prosrc from pg_proc')
AS t1(proname name, prosrc text) WHERE proname LIKE 'bytea%';
proname | prosrc
------------+------------
byteacat | byteacat
byteaeq | byteaeq
bytealt | bytealt
byteale | byteale
byteagt | byteagt
byteage | byteage
byteane | byteane
byteacmp | byteacmp
bytealike | bytealike
byteanlike | byteanlike
byteain | byteain
byteaout | byteaout
(12 rows)

SELECT dblink_connect('myconn', 'dbname=regression options=-csearch_path=');
dblink_connect
----------------
OK
(1 row)

SELECT * FROM dblink('myconn', 'select proname, prosrc from pg_proc')
AS t1(proname name, prosrc text) WHERE proname LIKE 'bytea%';
proname | prosrc
------------+------------
bytearecv | bytearecv
byteasend | byteasend
byteale | byteale
byteagt | byteagt
byteage | byteage
byteane | byteane
byteacmp | byteacmp
bytealike | bytealike
byteanlike | byteanlike
byteacat | byteacat
byteaeq | byteaeq
bytealt | bytealt
byteain | byteain
byteaout | byteaout
(14 rows)