接上一篇《PG-跨庫操作-dblink》;講下postgres_fdw的使用;postgres_fdw作業原理詳細介紹可以去看下《PostgreSQL指南》第4章;
對FDW特性;還支持在PostgreSQL異構資料庫的同步、遷移的場景,FDW隨著Postgres版本而升級、優化,對分布式架構也是支持的,
一、新建插件postgres_fdw
安裝插件postgres_fdw
lottu01=# create extension postgres_fdw;
二、新建遠程資料庫服務器
2.1、在本地庫創建SERVER
--1 賦予lottu01對應權限
lottu01=# grant usage on foreign data wrapper postgres_fdw to lottu01;
GRANT
lottu01=# \c lottu01 lottu01
You are now connected to database "lottu01" as user "lottu01".
--2 創建server
lottu01=> CREATE SERVER lottu FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '192.168.1.221', port '6000', dbname 'lottu');
CREATE SERVER
2.2、在本地庫創建user mapper
lottu01=> CREATE USER MAPPING FOR lottu01 SERVER lottu OPTIONS (user 'lottu', password 'li0924');
CREATE USER MAPPING
2.3、創建外部表
lottu01=> CREATE FOREIGN TABLE t1 (id int, info text) server lottu OPTIONS (schema_name 'public', table_name 't1');
CREATE FOREIGN TABLE
lottu01=> select * from t1;
id | info
------+-------
1001 | lottu
1002 | hello
1003 | rax
1004 | rax
1005 | lottu
(5 rows)
2.4、匯入外部表
CREATE FOREIGN TABLE中宣告的列資料型別和其他性質必須要匹配實際的遠程表,列名也必須匹配,不過也可以為個別列附上column_name選項以表示它們在遠程服務器上對應哪個列,在很多情況中,要手工構造外部表定義,使用IMPORT FOREIGN SCHEMA會更好,
lottu01=> create schema ft;
CREATE SCHEMA
lottu01=> IMPORT FOREIGN SCHEMA public FROM SERVER lottu INTO ft;
IMPORT FOREIGN SCHEMA
三、擴展
3.1、相關系統表
通過下列系統表可以查看資料庫外部表資訊,
| 系統表 | 簡命令操作 | 含義 |
|---|---|---|
| pg_extension | \dx | 插件 |
| pg_foreign_data_wrapper | \dew | 支持外部資料庫介面 |
| pg_foreign_server | \des | 外部服務器 |
| pg_user_mappings | \deu | 用戶管理 |
| pg_foreign_table | \det | 外部表 |
3.2、使用優化
減少對遠端服務器的連接影響;可以使用物化視圖;
--1、在本地資料庫創建物化視圖
create materialized view mv_t1 as select * from t1;
--2、 重繪一下本地的物化視圖即可看到新進來的資料:
refresh materialized view mv_t1
四、應用場景
4.1、資料同步
本地創建外部表;可對外部表支持執行delete、update、insert陳述句;同時遠程資料庫的表也會執行相對應的操作,例如兩個資料庫實作token的一致,
4.2、資料遷移
在匯入外部表;可以實作資料遷移,
4.3、分布式架構使用
citus的實作原理是采用FDW特性,安裝很簡單;但維護注意點比較多;想要更多了解可以找陳華軍老師,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/16461.html
標籤:PostgreSQL
