我知道在Oracle中可以創建存儲的數據庫鏈接,然後在查詢中使用它。例如:Postgresql創建存儲數據庫鏈接
腳本創造DBLINK:
CREATE PUBLIC DATABASE LINK my_link CONNECT TO my_schema IDENTIFIED BY shema_password USING 'remote';
而在這之後,我們可以在我們的查詢中使用它:
SELECT * FROM [email protected]_link;
我沒有找到Postgres的同一個解決方案。我不知道我們可以創建名爲dblink連接:
爲此,我們必須使用dblink_connect
與名稱參數。但創建命名的dblink會在會話關閉後破壞。
或者,我們可以創建爲每個查詢dblink的連接:
SELECT *
FROM dblink('host= port= dbname= user= password=',
'select table_schema, table_name from information_schema.tables where table_schema = ''data''') AS t1 (table_schema TEXT, table_name TEXT);
是否有可能在Postgres的創建存儲DBLINK並在不同的查詢使用它?或者我應該創建一些函數,返回封裝它們的dblink連接參數?
我試着用外部表,然後進行下一步的步驟:
創建postgres_fdw擴展:
CREATE EXTENSION IF NOT EXISTS postgres_fdw;
創建服務器:
CREATE SERVER my_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '-', port '-', dbname '-');
並創建映射用戶 'SYS',其中設定遠程用戶名和密碼:
CREATE USER MAPPING FOR sys SERVER light_house OPTIONS (USER 'remote_user', PASSWORD 'remove_password');
GRANT USAGE ON FOREIGN SERVER my_server TO sys;
架構中創建外部表:
CREATE FOREIGN TABLE system.my_local_table (
colums ..
) SERVER my_server OPTIONS (schema_name 'remote_user', table_name 'remote_table'
);
GRANT SELECT ON TABLE system.home_measurement TO argus_sys;
之後我抓住一個異常:
[2F003] ERROR: password is required
Description: Non-superuser cannot connect if the server does not request a password.
Help: Target server's authentication method must be changed.
「*如果服務器不請求密碼,非超級用戶無法連接*」 - 您誠實地運行不需要密碼連接的生產服務器? –
@a_horse_with_no_name對不起,但我不忍心。我在用戶映射中向遠程用戶聲明瞭passord(我更新了問題並添加了腳本),而且我已經足夠了,或者我錯了? – HAYMbl4
錯誤消息似乎表明您的服務器沒有_require_密碼。 –