跨庫通路常用的三種方式:schema,dblink,postgres_fdw 第一種:schema(架構方式) 其實還是在一個資料庫中,隻不過把不同資料儲存在不同的架構中,建立與public并行的架構
通路其他架構下面的需要帶上架構名稱.表名,如下格式 select * from public.test; select * from test.test1; 如果認為輸入架構名稱太麻煩,可以設定 set search_path to "$user", public,test; 前面是固定格式,後面是對應要通路的兩個架構,第一個參數為本架構,另一個為要通路的架構,設定完成後通路直接可以通路表名,不需要加架構名稱 在public通路test架構中的test1表:select * from test1; 第二種,dblink 跨庫查詢必須使用dblink,無法像Oracle那樣,授權然後直接通路 首先建立擴充 create extension dblink; 再去查詢 select * from dblink('host=127.0.0.1 dbname=postgres user=postgres password=123456','select * from account') as t(id int,name varchar(10)); 如果要查詢别的資料庫的東西,可以建立視圖,然後從視圖中查詢 第三種 postgres_fdw 首先安裝該擴充 CREATE EXTENSION postgres_fdw; 然後使用 CREATE SERVER建立一個外部伺服器。在這個示例中,我們希望連接配接到主機為192.83.123.89 的PostgreSQL伺服器,監聽端口為5432。遠端伺服器上做連接配接的資料庫名為situation CREATE SERVER foreign_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '192.168.6.168', port '5432', dbname 'situation'); 也需要一個使用 CREATE USER MAPPING定義的使用者映射,辨認将要在遠端伺服器上使用的角色: CREATE USER MAPPING FOR postgres SERVER foreign_server OPTIONS (user 'postgres', password '[email protected]'); 現在可以用 CREATE FOREIGN TABLE建立一個外部表了。在這個示例中,我們希望通路遠端伺服器上名為some_schema.some_table 的表。它的本地名為foreign_table:chatgroup為遠端表名 CREATE FOREIGN TABLE foreign_table ( id text NOT NULL, groupid text, userid text, createuserid text, createtime timestamp ) SERVER foreign_server OPTIONS (schema_name 'public', table_name 'chatgroup'); 查詢資料 select * from foreign_table;