管理 RDS for PostgreSQL 的逻辑插槽同步
从社区 PostgreSQL 17 开始,已通过 sync_replication_slots
参数或相关的函数 pg_sync_replication_slots()
引入了一项新功能(即自动将逻辑复制插槽从主服务器同步到备用服务器),该功能可在执行时手动同步插槽。
从 RDS for PostgreSQL 17 开始提供这些功能。典型的设置将具有主实例及其只读副本,以及主实例的逻辑复制订阅用户。
确保在创建订阅时将失效转移选项设置为 true:
CREATE SUBSCRIPTION
subname
CONNECTION 'host=...' PUBLICATIONpubname
WITH (failover = true);
这将在发布者上创建一个启用失效转移的逻辑插槽。
postgres=> SELECT slot_name, slot_type, failover FROM pg_catalog.pg_replication_slots; slot_name | slot_type | failover -----------+-----------+---------- subname | logical | t (1 row)
通过启用插槽同步,主实例上的所有失效转移逻辑复制插槽都将在物理备用实例上自动创建并定期同步。确保已通过参数组设置以下值:
-
rds.logical_replication
必须为1
才能启用逻辑复制 -
在备用实例上,
hot_standby_feedback
必须为1
-
备用实例上的
rds.logical_slot_sync_dbname
必须设置为有效的数据库名称此参数的默认值为
postgres
。如果逻辑发布实例有postgres
数据库,则无需更改默认参数。 -
主实例上的
synchronized_standby_slots
必须设置为要同步的备用实例的物理复制插槽 -
sync_replication_slots
必须为1
才能启用自动同步
使用启用失效转移的订阅插槽和上述参数值,当提升备用实例时,订阅用户可以更改其对这个新提升实例的订阅,并继续无缝地进行逻辑复制。