RDS PostgreSQL提供邏輯訂閱功能,支援在多個RDS PostgreSQL執行個體之間實現准即時表級單向同步,可以用於資料共用、資料匯總、資料拆分等業務情境。
如果您在全國多個地區部署業務,可以通過邏輯訂閱共用資料,例如將中心資料共用給其他地區,或者將其他地區資料匯總到中心進行即時分析查詢等。
本文簡單介紹邏輯訂閱的使用流程,樣本的流程如下:
源執行個體的資料庫src建立發布,發行資料表public.t1,然後在目的執行個體的資料庫dst建立訂閱sub1_from_pub1,訂閱源庫表public.t1。
更多詳情請參見邏輯訂閱原理與最佳實務。
注意事項
您可以在單個執行個體的兩個表之間實現邏輯訂閱,也可以在同一VPC內的兩個執行個體間(必須使用內網地址)實現邏輯訂閱。
前提條件
執行個體為RDS PostgreSQL 10及以上版本的雲端硬碟執行個體。
執行個體參數wal_level的值為logical,您可以在控制台的參數設定頁面進行修改,該參數修改後需要重啟執行個體才會生效。重啟執行個體會造成串連中斷,請提前做好業務安排,謹慎操作。
如果是同一VPC內兩個執行個體間實現邏輯訂閱,需要在各自的白名單中放通執行個體所在VPC的IP段,例如放通172.16.0.0/16。
需要具有rds_superuser許可權的帳號,例如高許可權帳號或者高許可權帳號使用
create role xxx with superuser
建立的其他帳號。
操作步驟
源庫建立新發布
在源庫裡建立新發布,命令如下:
CREATE PUBLICATION <發布名稱> FOR TABLE <表名>;
樣本
CREATE PUBLICATION pub1 FOR TABLE public.t1;
說明只能發布持久基表。詳情請參見CREATE PUBLICATION。
您可以通過
SELECT * FROM pg_publication;
查看當前資料庫有哪些發布。
目的庫建立訂閱
在目標庫建立新訂閱。
如果源庫和目標庫在相同的執行個體,使用如下步驟:
在來源資料庫中建立邏輯複製槽。
在目標資料庫中建立邏輯訂閱。
請提前在目標資料庫中建立與來源資料庫相同表結構的資料表。
同執行個體時,必須使用WITH添加訂閱參數
create_slot=false
。
SELECT pg_create_logical_replication_slot('<slot_name>', 'pgoutput');
說明CREATE SUBSCRIPTION <訂閱名稱> CONNECTION 'dbname=<源執行個體資料庫名>' PUBLICATION publication_name WITH (create_slot=false,slot_name=<slot_name>);
如果源庫和目標庫在不同的執行個體,使用如下步驟:
在目標資料庫中建立邏輯訂閱。
CREATE SUBSCRIPTION <訂閱名稱> CONNECTION '<源庫的執行個體串連資訊>' PUBLICATION <源庫的發布名稱>;
源庫的執行個體串連資訊格式為:
host=<源執行個體內網網域名稱> port=<源執行個體內網連接埠> user=<源執行個體有發布許可權帳號> password=<源執行個體帳號的密碼> dbname=<源執行個體資料庫名>
。樣本:
CREATE SUBSCRIPTION sub1_from_pub1 CONNECTION 'host=pgm-xxxxx.pgsql.singapore.rds.aliyuncs.com port=3433 user=test password=xxxxx dbname=src' PUBLICATION pub1 WITH (enabled, create_slot, slot_name='sub1_from_pub1');
說明您可以通過
SELECT * FROM pg_subscription;
查看整個資料庫叢集有哪些訂閱。源庫的發布名稱後可以使用WITH附加相關訂閱參數,詳情請參見CREATE SUBSCRIPTION。