PG-跨庫操作-postgres_fdw


接上一篇《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特性。安裝很簡單;但維護注意點比較多;想要更多了解可以找陳華軍老師。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM