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