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(省略時預設為 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)
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。