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