天天看點

postgresql 跨庫查詢

跨庫通路常用的三種方式:schema,dblink,postgres_fdw   第一種:schema(架構方式) 其實還是在一個資料庫中,隻不過把不同資料儲存在不同的架構中,建立與public并行的架構  

postgresql 跨庫查詢

通路其他架構下面的需要帶上架構名稱.表名,如下格式 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;