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