dblink_connect
dblink_connect â оÑкÑÑÐ²Ð°ÐµÑ Ð¿Ð¾ÑÑоÑнное подклÑÑение к ÑдалÑнной базе даннÑÑ
СинÑакÑиÑ
dblink_connect(text connstr) returns text dblink_connect(text connname, text connstr) returns text
ÐпиÑание
ФÑнкÑÐ¸Ñ dblink_connect() ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение к ÑдалÑнной базе даннÑÑ
Postgres Pro. Целевой ÑеÑÐ²ÐµÑ Ð¸ база даннÑÑ
ÑказÑваÑÑÑÑ Ð² ÑÑандаÑÑной ÑÑÑоке подклÑÑÐµÐ½Ð¸Ñ libpq. ÐÑли ÑÑебÑеÑÑÑ, ÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ назнаÑиÑÑ Ð¸Ð¼Ñ. Родин Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени могÑÑ Ð±ÑÑÑ Ð¾ÑкÑÑÑÑми неÑколÑко именованнÑÑ
подклÑÑений, но ÑолÑко одно подклÑÑение без имени. ÐодклÑÑение бÑÐ´ÐµÑ ÑоÑ
ÑанÑÑÑÑÑ, пока не бÑÐ´ÐµÑ Ð·Ð°ÐºÑÑÑо или до завеÑÑÐµÐ½Ð¸Ñ ÑеанÑа Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
Ð ÑÑÑоке подклÑÑÐµÐ½Ð¸Ñ Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð¸Ð¼Ñ ÑÑÑеÑÑвÑÑÑего ÑÑоÑоннего ÑеÑвеÑа. ÐÐ»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑоÑоннего ÑеÑвеÑа ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ Ð¾Ð±ÑÑÑÐºÑ ÑÑоÑонниÑ
даннÑÑ
dblink_fdw. См. пÑÐ¸Ð¼ÐµÑ Ð½Ð¸Ð¶Ðµ, а Ñакже CREATE SERVER и CREATE USER MAPPING.
ÐÑгÑменÑÑ
connnameÐмÑ, назнаÑаемое ÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ; еÑли опÑÑкаеÑÑÑ, оÑкÑÑваеÑÑÑ Ð±ÐµÐ·ÑмÑнное подклÑÑение, заменÑÑÑее Ñанее ÑÑÑеÑÑвÑÑÑее безÑмÑнное подклÑÑение.
connstrСÑÑока подклÑÑÐµÐ½Ð¸Ñ Ð² ÑÑиле libpq, напÑимеÑ
hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres password=mypasswd options=-csearch_path=. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 32.1.1. Рней Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð¸Ð¼Ñ ÑÑоÑоннего ÑеÑвеÑа.
ÐозвÑаÑаемое знаÑение
ÐозвÑаÑÐ°ÐµÑ ÑоÑÑоÑние (ÑÑо вÑегда ÑÑÑока OK, Ñак как в ÑлÑÑае лÑбой оÑибки ÑÑнкÑÐ¸Ñ Ð¿ÑеÑÑваеÑÑÑ, вÑÐ´Ð°Ð²Ð°Ñ Ð¸ÑклÑÑение).
ÐÑимеÑаниÑ
ÐÑли к базе даннÑÑ
, коÑоÑÐ°Ñ Ð½Ðµ пÑиведена в ÑооÑвеÑÑÑвие ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑ
ем, имеÑÑ Ð´Ð¾ÑÑÑп недовеÑеннÑе полÑзоваÑели, наÑинайÑе ÑÐµÐ°Ð½Ñ Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпнÑÑ
им Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи ÑÑ
ем из пÑÑи поиÑка (search_path). ÐапÑимеÑ, Ð´Ð»Ñ ÑÑого можно добавиÑÑ options=-csearch_path= в connstr. ÐÑо каÑаеÑÑÑ Ð½Ðµ ÑолÑко dblink, но и лÑбÑÑ
дÑÑгиÑ
инÑеÑÑейÑов Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÑоизволÑнÑÑ
SQL-команд.
СоздаваÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, не ÑÑебÑÑÑие аÑÑенÑиÑикаÑии по паÑÐ¾Ð»Ñ Ð¸ по GSSAPI, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ dblink_connect ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑм. ÐÑли ÑÑа возможноÑÑÑ Ð½Ñжна обÑÑнÑм полÑзоваÑелÑм, ÑледÑÐµÑ Ð²Ð¾ÑполÑзоваÑÑÑÑ ÑÑнкÑией dblink_connect_u.
ÐÑполÑзоваÑÑ Ð² именаÑ
подклÑÑений знаки «Ñавно» не ÑекомендÑеÑÑÑ, Ñак как пÑи ÑÑом возможна пÑÑаниÑа Ñо ÑÑÑоками подклÑÑений в дÑÑгиÑ
ÑÑнкÑиÑÑ
dblink.
ÐÑимеÑÑ
SELECT dblink_connect('dbname=postgres options=-csearch_path=');
dblink_connect
----------------
OK
(1 row)
SELECT dblink_connect('myconn', 'dbname=postgres options=-csearch_path=');
dblink_connect
----------------
OK
(1 row)
-- ФÑнкÑионалÑноÑÑÑ Ð¾Ð±ÑÑÑки ÑÑоÑонниÑ
даннÑÑ
(FOREIGN DATA WRAPPER)
-- ÐамеÑание: ÑÑÐ¾Ð±Ñ ÑÑо ÑабоÑало, Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑнÑÑ
подклÑÑений ÑÑебÑеÑÑÑ Ð°ÑÑенÑиÑикаÑÐ¸Ñ Ð¿Ð¾ паÑолÑ
-- РпÑоÑивном ÑлÑÑае, вÑзвав dblink_connect(), Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе:
-- ERROR: password is required
-- DETAIL: Non-superuser cannot connect if the server does not request a password.
-- HINT: Target server's authentication method must be changed.
--
-- ÐШÐÐÐÐ: ÑÑебÑеÑÑÑ Ð¿Ð°ÑолÑ
-- ÐÐÐÐ ÐÐÐÐСТÐ: ÐбÑÑнÑй полÑзоваÑÐµÐ»Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ, еÑли ÑеÑÐ²ÐµÑ Ð½Ðµ ÑÑебÑÐµÑ Ð¿Ð°ÑолÑ.
-- ÐÐÐСÐÐÐÐÐ: ÐеобÑ
одимо измениÑÑ Ð¼ÐµÑод аÑÑенÑиÑикаÑии Ñелевого ÑеÑвеÑа.
CREATE SERVER fdtest FOREIGN DATA WRAPPER dblink_fdw OPTIONS (hostaddr '127.0.0.1', dbname 'contrib_regression');
CREATE USER regress_dblink_user WITH PASSWORD 'secret';
CREATE USER MAPPING FOR regress_dblink_user SERVER fdtest OPTIONS (user 'regress_dblink_user', password 'secret');
GRANT USAGE ON FOREIGN SERVER fdtest TO regress_dblink_user;
GRANT SELECT ON TABLE foo TO regress_dblink_user;
\set ORIGINAL_USER :USER
\c - regress_dblink_user
SELECT dblink_connect('myconn', 'fdtest');
dblink_connect
----------------
OK
(1 row)
SELECT * FROM dblink('myconn', 'SELECT * FROM foo') AS t(a int, b text, c text[]);
a | b | c
----+---+---------------
0 | a | {a0,b0,c0}
1 | b | {a1,b1,c1}
2 | c | {a2,b2,c2}
3 | d | {a3,b3,c3}
4 | e | {a4,b4,c4}
5 | f | {a5,b5,c5}
6 | g | {a6,b6,c6}
7 | h | {a7,b7,c7}
8 | i | {a8,b8,c8}
9 | j | {a9,b9,c9}
10 | k | {a10,b10,c10}
(11 rows)
\c - :ORIGINAL_USER
REVOKE USAGE ON FOREIGN SERVER fdtest FROM regress_dblink_user;
REVOKE SELECT ON TABLE foo FROM regress_dblink_user;
DROP USER MAPPING FOR regress_dblink_user SERVER fdtest;
DROP USER regress_dblink_user;
DROP SERVER fdtest;