mirror of
https://github.com/postgres/postgres.git
synced 2025-08-06 18:42:54 +03:00
Added async query capability. Original patch by
Kai Londenberg, modified by Joe Conway
This commit is contained in:
@@ -118,3 +118,125 @@ 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)
|
||||
|
Reference in New Issue
Block a user