

# 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` である必要があります。

フェイルオーバー対応のサブスクリプションスロットと上記のパラメータ値を使用すると、スタンバイが昇格したとき、サブスクライバーはサブスクリプションをこの新しく昇格されたインスタンスに変更し、論理レプリケーションをシームレスに続行できます。