dblink — 在遠端資料庫中執行查詢
dblink(text connname, text sql [, bool fail_on_error]) returns setof record dblink(text connstr, text sql [, bool fail_on_error]) returns setof record dblink(text sql [, bool fail_on_error]) returns setof record
dblink
在遠端資料庫中執行查詢(通常是 SELECT
,但它可以是任何返回列的 SQL 語句)。
當給定兩個 text
參數時,第一個參數首先會被查找作為持續連線的名稱;如果找到,則該命令會在該連線上執行。如果未找到,則第一個參數會被視為 dblink_connect
的連線資訊字串,並且僅在此命令的持續時間內建立指定的連線。
connname
要使用的連線名稱;省略此參數以使用未命名的連線。
connstr
連線資訊字串,如先前針對 dblink_connect
所述。
sql
您希望在遠端資料庫中執行的 SQL 查詢,例如 select * from foo
。
fail_on_error
如果為 true(省略時為預設值),則在連線的遠端引發的錯誤也會在本端引發錯誤。 如果為 false,則遠端錯誤會在本端報告為 NOTICE,並且該函數不返回任何列。
該函數返回查詢產生的列。由於 dblink
可以與任何查詢一起使用,因此它被宣告為返回 record
,而不是指定任何特定的欄位集合。這表示您必須在呼叫查詢中指定預期的欄位集合 — 否則 PostgreSQL 將不知道預期什麼。這是一個範例
SELECT * FROM dblink('dbname=mydb options=-csearch_path=', 'select proname, prosrc from pg_proc') AS t1(proname name, prosrc text) WHERE proname LIKE 'bytea%';
FROM
子句的 “別名” 部分必須指定函數將返回的欄位名稱和類型。(在別名中指定欄位名稱實際上是標準 SQL 語法,但在 PostgreSQL 中指定欄位類型是一個擴充功能。)這讓系統能夠理解 *
應該擴充為什麼,以及 WHERE
子句中的 proname
指的是什麼,在嘗試執行函數之前。在執行時,如果來自遠端資料庫的實際查詢結果沒有與 FROM
子句中顯示的相同欄位數量,則會拋出錯誤。但是,欄位名稱不必匹配,並且 dblink
也不堅持精確的類型匹配。只要返回的資料字串對於 FROM
子句中宣告的欄位類型是有效的輸入,它就會成功。
使用預先決定的查詢使用 dblink
的一種便捷方法是建立視窗。這允許將欄位類型資訊隱藏在視窗中,而不必在每個查詢中都明確指出。例如,
CREATE VIEW myremote_pg_proc AS SELECT * FROM dblink('dbname=postgres options=-csearch_path=', 'select proname, prosrc from pg_proc') AS t1(proname name, prosrc text); SELECT * FROM myremote_pg_proc WHERE proname LIKE 'bytea%';
SELECT * FROM dblink('dbname=postgres options=-csearch_path=', 'select proname, prosrc from pg_proc') AS t1(proname name, prosrc text) WHERE proname LIKE 'bytea%'; proname | prosrc ------------+------------ byteacat | byteacat byteaeq | byteaeq bytealt | bytealt byteale | byteale byteagt | byteagt byteage | byteage byteane | byteane byteacmp | byteacmp bytealike | bytealike byteanlike | byteanlike byteain | byteain byteaout | byteaout (12 rows) SELECT dblink_connect('dbname=postgres options=-csearch_path='); dblink_connect ---------------- OK (1 row) SELECT * FROM dblink('select proname, prosrc from pg_proc') AS t1(proname name, prosrc text) WHERE proname LIKE 'bytea%'; proname | prosrc ------------+------------ byteacat | byteacat byteaeq | byteaeq bytealt | bytealt byteale | byteale byteagt | byteagt byteage | byteage byteane | byteane byteacmp | byteacmp bytealike | bytealike byteanlike | byteanlike byteain | byteain byteaout | byteaout (12 rows) SELECT dblink_connect('myconn', 'dbname=regression options=-csearch_path='); dblink_connect ---------------- OK (1 row) SELECT * FROM dblink('myconn', 'select proname, prosrc from pg_proc') AS t1(proname name, prosrc text) WHERE proname LIKE 'bytea%'; proname | prosrc ------------+------------ bytearecv | bytearecv byteasend | byteasend byteale | byteale byteagt | byteagt byteage | byteage byteane | byteane byteacmp | byteacmp bytealike | bytealike byteanlike | byteanlike byteacat | byteacat byteaeq | byteaeq bytealt | bytealt byteain | byteain byteaout | byteaout (14 rows)
如果您在文件中看到任何不正確、與您使用特定功能的體驗不符或需要進一步說明的內容,請使用 此表單 報告文件問題。