邏輯訂閱
RDS PostgreSQL提供邏輯訂閱功能,支持在多個RDS PostgreSQL實例之間實現(xiàn)準實時表級單向同步,可以用于數(shù)據(jù)共享、數(shù)據(jù)匯總、數(shù)據(jù)拆分等業(yè)務(wù)場景。
如果您在全國多個地域部署業(yè)務(wù),可以通過邏輯訂閱共享數(shù)據(jù),例如將中心數(shù)據(jù)共享給其他地域,或者將其他地域數(shù)據(jù)匯總到中心進行實時分析查詢等。
本文簡單介紹邏輯訂閱的使用流程,示例的流程如下:
源實例的數(shù)據(jù)庫src創(chuàng)建發(fā)布,發(fā)布表public.t1,然后在目的實例的數(shù)據(jù)庫dst創(chuàng)建訂閱sub1_from_pub1,訂閱源庫表public.t1。
更多詳情請參見邏輯訂閱原理與最佳實踐。
注意事項
您可以在單個實例的兩個表之間實現(xiàn)邏輯訂閱,也可以在同一VPC內(nèi)的兩個實例間(必須使用內(nèi)網(wǎng)地址)實現(xiàn)邏輯訂閱。
前提條件
實例為RDS PostgreSQL 10及以上版本的云盤實例。
實例參數(shù)wal_level的值為logical,您可以在控制臺的參數(shù)設(shè)置頁面進行修改,該參數(shù)修改后需要重啟實例才能生效。重啟實例會造成連接中斷,請?zhí)崆白龊脴I(yè)務(wù)安排,謹慎操作。
如果是同一VPC內(nèi)兩個實例間實現(xiàn)邏輯訂閱,需要在各自的白名單中放通實例所在VPC的IP段,例如放通172.16.0.0/16。
需要具有rds_superuser權(quán)限的賬號,例如高權(quán)限賬號或者高權(quán)限賬號使用
create role xxx with superuser
創(chuàng)建的其他賬號。
操作步驟
源庫創(chuàng)建新發(fā)布
在源庫里創(chuàng)建新發(fā)布,命令如下:
CREATE PUBLICATION <發(fā)布名稱> FOR TABLE <表名>;
示例
CREATE PUBLICATION pub1 FOR TABLE public.t1;
說明只能發(fā)布持久基表。詳情請參見CREATE PUBLICATION。
您可以通過
SELECT * FROM pg_publication;
查看當前數(shù)據(jù)庫有哪些發(fā)布。
目的庫創(chuàng)建訂閱
在目標庫創(chuàng)建新訂閱。
如果源庫和目標庫在相同的實例,使用如下步驟:
在源數(shù)據(jù)庫中創(chuàng)建邏輯復(fù)制槽。
在目標數(shù)據(jù)庫中創(chuàng)建邏輯訂閱。
請?zhí)崆霸谀繕藬?shù)據(jù)庫中創(chuàng)建與源數(shù)據(jù)庫相同表結(jié)構(gòu)的數(shù)據(jù)表。
同實例時,必須使用WITH添加訂閱參數(shù)
create_slot=false
。
SELECT pg_create_logical_replication_slot('<slot_name>', 'pgoutput');
說明CREATE SUBSCRIPTION <訂閱名稱> CONNECTION 'dbname=<源實例數(shù)據(jù)庫名>' PUBLICATION publication_name WITH (create_slot=false,slot_name=<slot_name>);
如果源庫和目標庫在不同的實例,使用如下步驟:
在目標數(shù)據(jù)庫中創(chuàng)建邏輯訂閱。
CREATE SUBSCRIPTION <訂閱名稱> CONNECTION '<源庫的實例連接信息>' PUBLICATION <源庫的發(fā)布名稱>;
源庫的實例連接信息格式為:
host=<源實例內(nèi)網(wǎng)域名> port=<源實例內(nèi)網(wǎng)端口> user=<源實例有發(fā)布權(quán)限賬號> password=<源實例賬號的密碼> dbname=<源實例數(shù)據(jù)庫名>
。示例:
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;
查看整個數(shù)據(jù)庫集群有哪些訂閱。源庫的發(fā)布名稱后可以使用WITH附加相關(guān)訂閱參數(shù),詳情請參見CREATE SUBSCRIPTION。