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)