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