跨庫訪問常用的三種方式: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 'admin@110');
現在可以用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;
閱讀更多 初級尋路人 的文章
關鍵字: PostgreSQL 架構 數據庫