02.27 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 '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;


分享到:


相關文章: