On this page
dblink_get_result
dblink_get_result —获取异步查询结果
Synopsis
dblink_get_result(text connname [, bool fail_on_error]) returns setof record
Description
dblink_get_result
收集先前使用dblink_send_query
发送的异步查询的结果。如果查询尚未完成,则dblink_get_result
将 await 直到查询完成。
Arguments
connname
- 要使用的连接名称。
fail_on_error
- 如果为 true(省略时的默认值),则在连接的远程端引发的错误也将导致本地引发错误。如果为 false,则远程错误将在本地报告为 NOTICE,并且该函数不返回任何行。
Return Value
对于异步查询(即返回行的 SQL 语句),该函数返回查询产生的行。要使用此功能,您将需要指定预期的列集,如先前针对dblink
所述。
对于异步命令(即,SQL 语句不返回行),该函数将返回单行和一个包含命令状态字符串的文本列。仍然需要指定结果将在调用FROM
子句中具有单个 text 列。
Notes
如果dblink_send_query
返回 1,则必须调用此函数。必须为每个发送的查询调用一次此函数,并再次调用一次以获得空的设置结果,然后才能再次使用该连接。
当使用dblink_send_query
和dblink_get_result
时,dblink 会获取整个远程查询结果,然后再将其中的任何一个返回给本地查询处理器。如果查询返回大量行,则可能导致本地会话中的瞬时内存膨胀。最好打开带有dblink_open
的游标这样的查询,然后一次获取可 Management 的行数。或者,使用普通的dblink()
,通过将大型结果集假脱机到磁盘来避免内存膨胀。
Examples
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
contrib_regression-# 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)