dblink_get_result
Name
dblink_get_result -- 获得异步查询结果
Synopsis
dblink_get_result(text connname [, bool fail_on_error]) returns setof record
描述
dblink_get_result
收集先前使用dblink_send_query
发送的异步查询结果。 如果还没完成查询,那么dblink_get_result
将等待它。
参数
conname
要使用的连接名字。
fail_on_error
如果真(忽略时缺省)那么在连接的远程端抛出的错误也会导致本地抛出错误, 如果假,那么远程错误在本地作为NOTICE被报告, 并且函数没有返回行。
返回值
一个异步查询(也就是说,返回行的SQL语句), 该函数返回通过查询产生的行。要使用该函数,你将需要指定预期的字段集, 正如前面讨论的dblink
。
一个异步命令(也就是说,没有返回行的SQL语句), 该函数返回带有该命令的状态字符串的单文本列的单一行。 声明结果将在调用FROM
子句中有单一文本列。
注意
如果dblink_send_query
返回1,那么必须调用该函数。 它必须被每一个查询调用,并且一个额外时间来获取空集结果, 连接之前可以再次使用。
当在返回它到本地查询处理器之前使用dblink_send_query
和 dblink_get_result
, dblink抓取 整个远程查询结果。如果查询返回大量行,那么 这可以导致本地会话短暂内存膨胀。它可以更好的打开这个查询比如使用dblink_open
的游标, 然后抓取每次可管理的行数。另外,使用普通的dblink()
通过多任务缓冲处理大量结果集到磁盘避免内存膨胀。
例子
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)