dblink_connect — 開啟到遠端資料庫的持久連線
dblink_connect(text connstr) returns text dblink_connect(text connname, text connstr) returns text
dblink_connect()
建立到遠端 PostgreSQL 資料庫的連線。要連線的伺服器和資料庫透過標準的 libpq 連線字串來識別。您可以選擇性地為連線指定一個名稱。可以同時開啟多個具名連線,但一次只允許一個未具名連線。連線將持續存在,直到關閉或資料庫工作階段結束。
連線字串也可以是現有外部伺服器的名稱。建議在定義外部伺服器時使用外部資料包裝函式 dblink_fdw
。請參閱下面的範例,以及 CREATE SERVER 和 CREATE USER MAPPING。
connname
用於此連線的名稱;如果省略,則開啟未命名的連線,取代任何現有的未命名連線。
connstr
libpq 樣式的連線資訊字串,例如 hostaddr=127.0.0.1 port=5432 dbname=mydb user=postgres password=mypasswd options=-csearch_path=
。有關詳細資訊,請參閱 第 32.1.1 節。或者,外部伺服器的名稱。
傳回狀態,始終為 OK
(因為任何錯誤都會導致函數拋出錯誤而不是傳回)。
如果不可信任的使用者可以存取尚未採用安全結構描述使用模式的資料庫,請在每個工作階段開始時,從 search_path
中移除可公開寫入的結構描述。 例如,可以將 options=-csearch_path=
新增到 connstr
。 這個考量並非 dblink
獨有;它適用於每個執行任意 SQL 指令的介面。
只有超級使用者可以使用 dblink_connect
建立非密碼驗證和非 GSSAPI 驗證的連線。 如果非超級使用者需要此功能,請改用 dblink_connect_u
。
選擇包含等號的連線名稱是不明智的,因為這會導致與其他 dblink
函數中的連線資訊字串混淆的風險。
SELECT dblink_connect('dbname=postgres options=-csearch_path='); dblink_connect ---------------- OK (1 row) SELECT dblink_connect('myconn', 'dbname=postgres options=-csearch_path='); dblink_connect ---------------- OK (1 row) -- FOREIGN DATA WRAPPER functionality -- Note: local connection must require password authentication for this to work properly -- Otherwise, you will receive the following error from dblink_connect(): -- ERROR: password is required -- DETAIL: Non-superuser cannot connect if the server does not request a password. -- HINT: Target server's authentication method must be changed. CREATE SERVER fdtest FOREIGN DATA WRAPPER dblink_fdw OPTIONS (hostaddr '127.0.0.1', dbname 'contrib_regression'); CREATE USER regress_dblink_user WITH PASSWORD 'secret'; CREATE USER MAPPING FOR regress_dblink_user SERVER fdtest OPTIONS (user 'regress_dblink_user', password 'secret'); GRANT USAGE ON FOREIGN SERVER fdtest TO regress_dblink_user; GRANT SELECT ON TABLE foo TO regress_dblink_user; \set ORIGINAL_USER :USER \c - regress_dblink_user SELECT dblink_connect('myconn', 'fdtest'); dblink_connect ---------------- OK (1 row) SELECT * FROM dblink('myconn', 'SELECT * FROM foo') AS t(a int, b text, c text[]); a | b | c ----+---+--------------- 0 | a | {a0,b0,c0} 1 | b | {a1,b1,c1} 2 | c | {a2,b2,c2} 3 | d | {a3,b3,c3} 4 | e | {a4,b4,c4} 5 | f | {a5,b5,c5} 6 | g | {a6,b6,c6} 7 | h | {a7,b7,c7} 8 | i | {a8,b8,c8} 9 | j | {a9,b9,c9} 10 | k | {a10,b10,c10} (11 rows) \c - :ORIGINAL_USER REVOKE USAGE ON FOREIGN SERVER fdtest FROM regress_dblink_user; REVOKE SELECT ON TABLE foo FROM regress_dblink_user; DROP USER MAPPING FOR regress_dblink_user SERVER fdtest; DROP USER regress_dblink_user; DROP SERVER fdtest;
如果您在文件中發現任何不正確、與特定功能的使用體驗不符或需要進一步說明的內容,請使用此表單來報告文件問題。