dblink_get_result — 得到一个异步查询结果
dblink_get_result(text connname [, bool fail_on_error]) 返回 record 集合
dblink_get_result
收集之前dblink_send_query
发送的一个异步查询的结果。如果该查询还没有完成,dblink_get_result
将等待直到它完成。
connname
要使用的连接名。
fail_on_error
如果为真(忽略时的默认值),那么在连接的远端抛出的一个错误也会导致本地抛出一个错误。如果为假,远程错误只在本地被报告为一个 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)
F.28.1. 概述F.28.2. 样例输出 pgrowlocks模块提供了一个函数来显示一个指定表的行锁定信息。默认情况下,使用仅限于超级用户、p...
F.36.1. refint — 用于实现参照完整性的函数F.36.2. autoinc — 用于自增域的函数F.36.3. insert_username — 用于跟踪谁修改了...
SQL SELECT TOP 子句SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录...
SQL INSERT INTO SELECT 语句通过 SQL,您可以从一个表复制信息到另一个表。 INSERT INTO SELECT 语句从一个表复制数据,然...
SQL RIGHT JOIN 关键字SQL RIGHT JOIN 关键字 RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。...
SQL NULL 函数SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数 请看下面的 "Products" 表: P_Id ProductName UnitPrice Unit...
SQL Server DATEADD() 函数 SQL Server Date 函数定义和用法 DATEADD() 函数在日期中添加或减去指定的时间间隔。 语法DATEADD(da...
SQL HAVING 子句HAVING 子句 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与 Aggregate 函数一起使用。 ...
我们知道从MySQL表中使用SQL SELECT 语句来读取数据。如果我们需要对读取的数据进行排序,我们就可以使用MySQL的 ORDER BY ...
DROP PROCEDURE IF EXISTS FillDateTable;delimiter //CREATE PROCEDURE FillDateTable()LANGUAGE SQLNOT DETERMINISTICCONTAINS...