mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-29 05:37:20 +02:00
243 lines
6.1 KiB
Plaintext
243 lines
6.1 KiB
Plaintext
==================================================================
|
|
Name
|
|
|
|
dblink -- Returns a set from a remote database
|
|
|
|
Synopsis
|
|
|
|
dblink(text connstr, text sql [, bool fail_on_error])
|
|
dblink(text connname, text sql [, bool fail_on_error])
|
|
dblink(text sql [, bool fail_on_error])
|
|
|
|
Inputs
|
|
|
|
connname
|
|
connstr
|
|
If two arguments are present, the first is first assumed to be a specific
|
|
connection name to use. If the name is not found, the argument is then
|
|
assumed to be a valid connection string, of standard libpq format,
|
|
e.g.: "hostaddr=127.0.0.1 dbname=mydb user=postgres password=mypasswd"
|
|
|
|
If only one argument is used, then the unnamed connection is used.
|
|
|
|
sql
|
|
|
|
sql statement that you wish to execute on the remote host
|
|
e.g. "select * from pg_class"
|
|
|
|
fail_on_error
|
|
|
|
If true (default when not present) then an ERROR thrown on the remote side
|
|
of the connection causes an ERROR to also be thrown locally. If false, the
|
|
remote ERROR is locally treated as a NOTICE, and no rows are returned.
|
|
|
|
Outputs
|
|
|
|
Returns setof record
|
|
|
|
Example usage
|
|
|
|
select * from dblink('dbname=postgres','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');
|
|
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');
|
|
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)
|
|
|
|
|
|
==================================================================
|
|
A more convenient way to use dblink may be to create a view:
|
|
|
|
create view myremote_pg_proc as
|
|
select *
|
|
from dblink('dbname=postgres','select proname, prosrc from pg_proc')
|
|
as t1(proname name, prosrc text);
|
|
|
|
Then you can simply write:
|
|
|
|
select * from myremote_pg_proc where proname like 'bytea%';
|
|
|
|
|
|
==================================================================
|
|
Name
|
|
|
|
dblink_send_query -- Sends an async query to a remote database
|
|
|
|
Synopsis
|
|
|
|
dblink_send_query(text connname, text sql)
|
|
|
|
Inputs
|
|
|
|
connname
|
|
The specific connection name to use.
|
|
|
|
sql
|
|
|
|
sql statement that you wish to execute on the remote host
|
|
e.g. "select * from pg_class"
|
|
|
|
Outputs
|
|
|
|
Returns int. A return value of 1 if the query was successfully dispatched,
|
|
0 otherwise. If 1, results must be fetched by dblink_get_result(connname).
|
|
A running query may be cancelled by dblink_cancel_query(connname).
|
|
|
|
Example usage
|
|
|
|
SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
|
|
SELECT * from
|
|
dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1;
|
|
|
|
==================================================================
|
|
Name
|
|
|
|
dblink_get_result -- Gets an async query result
|
|
|
|
Synopsis
|
|
|
|
dblink_get_result(text connname [, bool fail_on_error])
|
|
|
|
Inputs
|
|
|
|
connname
|
|
The specific connection name to use. An asynchronous query must
|
|
have already been sent using dblink_send_query()
|
|
|
|
fail_on_error
|
|
|
|
If true (default when not present) then an ERROR thrown on the remote side
|
|
of the connection causes an ERROR to also be thrown locally. If false, the
|
|
remote ERROR is locally treated as a NOTICE, and no rows are returned.
|
|
|
|
Outputs
|
|
|
|
Returns setof record
|
|
|
|
Notes
|
|
Blocks until a result gets available.
|
|
|
|
This function *must* be called if dblink_send_query returned
|
|
a 1, even on cancelled queries - otherwise the connection
|
|
can't be used anymore. It must be called once for each query
|
|
sent, and one additional time to obtain an empty set result,
|
|
prior to using the connection again.
|
|
|
|
Example usage
|
|
|
|
contrib_regression=# SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
|
|
dblink_connect
|
|
----------------
|
|
OK
|
|
(1 row)
|
|
|
|
contrib_regression=# SELECT * from
|
|
contrib_regression-# dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1;
|
|
t1
|
|
----
|
|
1
|
|
(1 row)
|
|
|
|
contrib_regression=# SELECT * from dblink_get_result('dtest1') as t1(f1 int, f2 text, f3 text[]);
|
|
f1 | f2 | f3
|
|
----+----+------------
|
|
0 | a | {a0,b0,c0}
|
|
1 | b | {a1,b1,c1}
|
|
2 | c | {a2,b2,c2}
|
|
(3 rows)
|
|
|
|
contrib_regression=# SELECT * from dblink_get_result('dtest1') as t1(f1 int, f2 text, f3 text[]);
|
|
f1 | f2 | f3
|
|
----+----+----
|
|
(0 rows)
|
|
|
|
contrib_regression=# SELECT * from
|
|
dblink_send_query('dtest1', 'select * from foo where f1 < 3; select * from foo where f1 > 6') as t1;
|
|
t1
|
|
----
|
|
1
|
|
(1 row)
|
|
|
|
contrib_regression=# SELECT * from dblink_get_result('dtest1') as t1(f1 int, f2 text, f3 text[]);
|
|
f1 | f2 | f3
|
|
----+----+------------
|
|
0 | a | {a0,b0,c0}
|
|
1 | b | {a1,b1,c1}
|
|
2 | c | {a2,b2,c2}
|
|
(3 rows)
|
|
|
|
contrib_regression=# SELECT * from dblink_get_result('dtest1') as t1(f1 int, f2 text, f3 text[]);
|
|
f1 | f2 | f3
|
|
----+----+---------------
|
|
7 | h | {a7,b7,c7}
|
|
8 | i | {a8,b8,c8}
|
|
9 | j | {a9,b9,c9}
|
|
10 | k | {a10,b10,c10}
|
|
(4 rows)
|
|
|
|
contrib_regression=# SELECT * from dblink_get_result('dtest1') as t1(f1 int, f2 text, f3 text[]);
|
|
f1 | f2 | f3
|
|
----+----+----
|
|
(0 rows)
|