Postgresql 中文操作指南

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 将等待直到它完成。

Arguments

  • connname

    • 要使用的连接的名称。

  • fail_on_error

    • 如果值为 true(省略时为默认值),则在连接的远程端抛出的错误将导致在本地也抛出错误。如果为 false,远程错误在本地将报告为 NOTICE,并且函数不返回任何行。

Return Value

对于异步查询(即返回行的 SQL 语句),此函数将返回查询生成的行。若要使用此函数,你需要指定预期的列集,如先前针对 dblink 讨论的那样。

对于一个异步命令(即未返回行的 SQL 语句),此函数返回一行,它包含一个文本列,其中包含该命令的状态字符串。在调用 FROM 子句时,仍然需要指定结果将在单个文本列中。

Notes

此函数只能在 dblink_send_query 返回 1 时 must 调用。对于发送的每个查询,必须调用此函数一次,在再次使用连接之前需额外调用一次以获取一个空集结果。

在使用 dblink_send_querydblink_get_result 时,dblink 在将任何结果返回本地查询处理器之前提取整个远程查询结果。如果查询返回大量的行,则可能导致本地会话中的瞬态内存膨胀。可能最好用 dblink_open 打开这样一个查询作为游标,然后一次检索可管理的数量的行。或者,使用普通的 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 * FROMcontrib_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)