

# 管理 RDS for PostgreSQL 的逻辑插槽同步
<a name="Appendix.PostgreSQL.CommonDBATasks.pglogical.slot.synchronization"></a>

从社区 PostgreSQL 17 开始，已通过 `sync_replication_slots` 参数或相关的函数 `pg_sync_replication_slots()` 引入了一项新功能（即自动将逻辑复制插槽从主服务器同步到备用服务器），该功能可在执行时手动同步插槽。

从 RDS for PostgreSQL 17 开始提供这些功能。典型的设置将具有主实例及其[只读副本](USER_PostgreSQL.Replication.ReadReplicas.md)，以及主实例的逻辑复制订阅用户。

确保在创建订阅时将失效转移选项设置为 true：

```
CREATE SUBSCRIPTION subname CONNECTION 'host=...' PUBLICATION pubname 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)
```

通过启用插槽同步，主实例上的所有失效转移逻辑复制插槽都将在物理备用实例上自动创建并定期同步。确保已通过[参数组](USER_WorkingWithParamGroups.Associating.md)设置以下值：
+ `rds.logical_replication` 必须为 `1` 才能启用逻辑复制
+ 在备用实例上，`hot_standby_feedback` 必须为 `1`
+ 备用实例上的 `rds.logical_slot_sync_dbname` 必须设置为有效的数据库名称

  此参数的默认值为 `postgres`。如果逻辑发布实例有 `postgres` 数据库，则无需更改默认参数。
+ 主实例上的 `synchronized_standby_slots` 必须设置为要同步的备用实例的物理复制插槽
+ `sync_replication_slots` 必须为 `1` 才能启用自动同步

使用启用失效转移的订阅插槽和上述参数值，当提升备用实例时，订阅用户可以更改其对这个新提升实例的订阅，并继续无缝地进行逻辑复制。