RDS PostgreSQL提供邏輯訂閱功能,支援在多個RDS PostgreSQL執行個體之間實現准即時表級單向同步,可以用於資料共用、資料匯總、資料拆分等業務情境。
功能簡介
如果您在全國多個地區部署業務,可以通過邏輯訂閱共用資料,例如將中心資料共用給其他地區,或者將其他地區資料匯總到中心進行即時分析查詢等。
本文簡單介紹邏輯訂閱的使用流程,樣本的流程如下:
發布端執行個體的資料庫testdb01建立發布,發行資料表為public.t1。
訂閱端執行個體的資料庫testdb02建立訂閱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;查看當前資料庫有哪些發布。
訂閱端建立訂閱
在訂閱端資料庫建立新訂閱。
發布端和訂閱端是同一執行個體中的不同資料庫
在發布端資料庫中建立邏輯複製槽。
SELECT pg_create_logical_replication_slot('<slot_name>', 'pgoutput');在訂閱端資料庫中,建立與待訂閱的發布端資料庫表具有相同結構和名稱的表。
在訂閱端資料庫中建立邏輯訂閱。
RDS PostgreSQL 16及之後的版本
CREATE SUBSCRIPTION <訂閱名稱> CONNECTION 'host=127.0.0.1 port=<內網連接埠> user=<具有發布許可權的帳號> password=<帳號的密碼> dbname=<發布端資料庫名>' PUBLICATION publication_name WITH (create_slot=false,slot_name=<slot_name>);RDS PostgreSQL 10~15
CREATE SUBSCRIPTION <訂閱名稱> CONNECTION 'dbname=<發布端資料庫名>' PUBLICATION publication_name WITH (create_slot=false,slot_name=<slot_name>);
重要發布端資料庫和訂閱端資料庫位於相同的執行個體時,必須使用WITH添加訂閱參數
create_slot=false。發布端和訂閱端是不同執行個體的不同資料庫
在訂閱端資料庫中,建立與待訂閱的發布端資料庫表具有相同結構和名稱的表。
在訂閱端資料庫中建立邏輯訂閱。
CREATE SUBSCRIPTION <訂閱名稱> CONNECTION 'host=<發布端執行個體內網網域名稱> port=<發布端執行個體內網連接埠> user=<發布端執行個體有發布許可權的帳號> password=<發布端執行個體帳號的密碼> dbname=<發布端執行個體資料庫名>' PUBLICATION <發布端資料庫的發布名稱>;
樣本:
CREATE SUBSCRIPTION sub1_from_pub1 CONNECTION 'host=pgm-2ze7n9zb0n1f****.pg.rds.aliyuncs.comm port=5432 user=testdbuser password=****x dbname=testdb01' PUBLICATION pub1 WITH (enabled, create_slot, slot_name='sub1_from_pub1');說明您可以通過
SELECT * FROM pg_subscription;命令查看整個資料庫叢集有哪些訂閱。發布端資料庫的發布名稱後可使用
WITH附加相關訂閱參數,詳情請參見CREATE SUBSCRIPTION。