PostgreSQL dblink_get_result

2021-09-16 15:40 更新

dblink_get_result — 得到一個(gè)異步查詢結(jié)果

大綱

dblink_get_result(text connname [, bool fail_on_error]) 返回 record 集合

描述

dblink_get_result收集之前dblink_send_query發(fā)送的一個(gè)異步查詢的結(jié)果。如果該查詢還沒(méi)有完成,dblink_get_result將等待直到它完成。

參數(shù)

connname

要使用的連接名。

fail_on_error

如果為真(忽略時(shí)的默認(rèn)值),那么在連接的遠(yuǎn)端拋出的一個(gè)錯(cuò)誤也會(huì)導(dǎo)致本地拋出一個(gè)錯(cuò)誤。如果為假,遠(yuǎn)程錯(cuò)誤只在本地被報(bào)告為一個(gè) NOTICE,并且該函數(shù)不返回行。

返回值

對(duì)于一個(gè)異步查詢(也就是一個(gè)返回行的 SQL 語(yǔ)句),該函數(shù)返回查詢產(chǎn)生的行。要使用這個(gè)函數(shù),你將需要指定所期待的列集合,如前面為dblink所討論的那樣。

對(duì)于一個(gè)異步命令(也就是一個(gè)不返回行的 SQL 語(yǔ)句),該函數(shù)返回一個(gè)只有單個(gè)文本列的單行,其中包含了該命令的狀態(tài)字符串。仍必須在調(diào)用的FROM子句中指定結(jié)果將具有一個(gè)單一文本行。

注解

如果dblink_send_query返回 1,這個(gè)函數(shù)就必須被調(diào)用。對(duì)每一個(gè)已發(fā)送的查詢都必須調(diào)用一次這個(gè)函數(shù),并且在連接再次可用之前還要多調(diào)用一次來(lái)得到一個(gè)空結(jié)果集。

當(dāng)使用dblink_send_querydblink_get_result時(shí),在將結(jié)果集中的任何一行返回給本地查詢處理器之前,dblink將取得整個(gè)遠(yuǎn)程查詢結(jié)果。如果該查詢返回大量的行,這可能會(huì)導(dǎo)致本地會(huì)話中短暫的內(nèi)存膨脹。最好將這樣的一個(gè)查詢用dblink_open打開(kāi)成一個(gè)游標(biāo)并且接著每次取得數(shù)量可管理的行。也可以使用簡(jiǎn)單的 dblink(),它會(huì)避免緩沖大型結(jié)果集到磁盤(pán)上導(dǎo)致的內(nèi)存膨脹。

例子

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)
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)