dblink_get_result — 获取异步查询结果
dblink_get_result(text connname [, bool fail_on_error]) returns setof record
dblink_get_result
收集先前使用 dblink_send_query
发送的异步查询的结果。如果查询尚未完成,dblink_get_result
将等待其完成。
connname
要使用的连接的名称。
fail_on_error
如果为 true(省略时为默认值),则在远程端抛出的错误会导致本地端也抛出错误。如果为 false,则远程错误将作为 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)
如果您在文档中发现任何错误,与您对特定功能的体验不符,或者需要进一步说明,请使用 此表格 报告文档问题。