dblink_get_result

名称

dblink_get_result -- 获得异步查询结果

大纲

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_querydblink_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)