dblink
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.sqlSQL-запÑоÑ, коÑоÑÑй Ð²Ñ Ñ Ð¾ÑиÑе вÑполниÑÑ Ð² ÑдалÑнной базе даннÑÑ , напÑимеÑ
select * from foo.fail_on_errorÐÑли Ñавен true (ÑÑо знаÑение по ÑмолÑаниÑ), в ÑлÑÑае оÑибки, вÑданной на ÑдалÑнной ÑÑоÑоне ÑоединениÑ, оÑибка Ñакже вÑдаÑÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ñно. ÐÑли Ñавен false, ÑдалÑÐ½Ð½Ð°Ñ Ð¾Ñибка вÑдаÑÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ñно как ÐÐÐÐЧÐÐÐÐ, и ÑÑнкÑÐ¸Ñ Ð½Ðµ возвÑаÑÐ°ÐµÑ ÑÑÑоки.
ÐозвÑаÑаемое знаÑение
ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ ÑÑÑоки, вÑдаваемÑе в ÑезÑлÑÑаÑе запÑоÑа. Так как dblink Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑ Ð¿ÑоизволÑнÑе запÑоÑÑ, она обÑÑвлена как возвÑаÑаÑÑÐ°Ñ Ñип record, а не некоÑоÑÑй опÑеделÑннÑй Ð½Ð°Ð±Ð¾Ñ ÑÑолбÑов. ÐÑо ознаÑаеÑ, ÑÑо Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑказаÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ñй Ð½Ð°Ð±Ð¾Ñ ÑÑолбÑов в вÑзÑваÑÑем запÑоÑе â в пÑоÑивном ÑлÑÑае Postgres Pro не бÑÐ´ÐµÑ Ð·Ð½Ð°ÑÑ, Ñего ожидаÑÑ. ÐапÑимеÑ:
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, но опÑеделение Ñипов ÑÑолбÑов ÑвлÑеÑÑÑ ÑаÑÑиÑением Postgres Pro.) ÐÑо позволÑÐµÑ ÑиÑÑеме понÑÑÑ, во ÑÑо должно ÑазвоÑаÑиваÑÑÑÑ Ð¾Ð±Ð¾Ð·Ð½Ð°Ñение *, и на ÑÑо ÑÑÑлаеÑÑÑ 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)