dblink_get_result — 获取异步查询结果
dblink_get_result(text connname [, bool fail_on_error]) 返回 setof record
dblink_get_result 收集此前用 dblink_send_query 发送的异步查询结果。如果该查询尚未完成, dblink_get_result 将等待直至其完成。
connname要使用的连接名称。
fail_on_error如果为真(省略时默认),则连接远程端抛出的错误也会在本地抛出。如果为假,远程端错误会在本地报告为一个 NOTICE,并且该函数不返回任何行。
对于异步查询(即返回行的 SQL 语句),该函数返回查询产生的行。要使用此函数,需要像前面讨论 dblink 时那样,指定预期的列集。
对于异步命令(即不返回行的 SQL 语句),该函数返回一个只有一个 text 列的单行,其中包含命令的状态字符串。即便如此,仍需要在调用查询的 FROM 子句中指定结果只有一个 text 列。
如果 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)
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。