

# Aurora での PostgreSQL 論理レプリケーションの概要
<a name="AuroraPostgreSQL.Replication.Logical"></a>

Aurora PostgreSQL DB クラスターで PostgreSQL の論理レプリケーション機能を使用することで、データベースインスタンス全体ではなく、個々のテーブルをレプリケートおよび同期できます。論理レプリケーションでは、パブリケーションおよびサブスクリプションモデルを使用して、ソースからの変更を 1 人または複数の受信者にレプリケートします。これは、PostgreSQL のログ先行書き込み (WAL) の変更レコードを使用することで動作します。送信元 (*パブリッシャー*) は、指定されたテーブルの WAL データを 1 人または複数の受信者 (*サブスクライバー*) に送信します。これによって変更がレプリケートされ、サブスクライバーのテーブルとパブリッシャーのテーブルの同期を維持できます。パブリッシャーによる一連の変更は、*パブリケーション*を使用して識別します。サブスクライバーは、パブリッシャーのデータベースとそのパブリケーションへの接続を定義する*サブスクリプション*を作成することによって変更を取得できます。*レプリケーション*スロットは、この方式によってサブスクリプションの進行状況を追跡するために使用されるメカニズムです。

Aurora PostgreSQL DB クラスターでは、WAL レコードは Aurora ストレージに保存されます。論理レプリケーションシナリオでパブリッシャーとして機能する Aurora PostgreSQL DB クラスターは、Aurora ストレージから WAL データを読み込み、デコードしてサブスクライバーに送信し、そのインスタンスのテーブルに変更を適用できるようにします。パブリッシャーでは、*論理デコーダー*を使用してデータをデコードすることでサブスクライバーが使用できるようにします。デフォルトでは、Aurora PostgreSQL DB クラスターはデータを送信する際にネイティブ PostgreSQL `pgoutput` プラグインを使用します。他の論理デコーダーも使用できます。例えば、Aurora PostgreSQL は WAL データを JSON に変換する `[wal2json](https://github.com/eulerto/wal2json)` プラグインもサポートしています。

Aurora PostgreSQL バージョン 14.5、13.8、12.12、11.17 以降、Aurora PostgreSQL は PostgreSQL の論理レプリケーションプロセスを*ライトスルーキャッシュ*で強化してパフォーマンスを向上させています。WAL トランザクションログは、ディスク I/O の量、つまり論理デコード中に Aurora ストレージから読み取る量を減らすために、ローカルでバッファにキャッシュされます。Aurora PostgreSQL DB クラスターの論理レプリケーションを使用する場合は常に、ライトスルーキャッシュがデフォルトで使用されます。Aurora には、キャッシュの管理に使用できる機能がいくつか用意されています。詳細については、「[Aurora PostgreSQL 論理レプリケーション書き込みスルーキャッシュのモニタリング](AuroraPostgreSQL.Replication.Logical-monitoring.md#AuroraPostgreSQL.Replication.Logical-write-through-cache)」を参照してください。

論理レプリケーションは、現在の Aurora PostgreSQL のすべてのバージョンでサポートされています。詳細については、「*Aurora PostgreSQL リリースノート*」の「[Amazon Aurora PostgreSQL の更新](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Updates.html)」を参照してください。

論理レプリケーションは、Babelfish for Aurora PostgreSQL で以下のバージョンからサポートされています。
+ 15.7 以降のバージョン
+ 16.3 以降のバージョン

**注記**  
PostgreSQL 10 で導入されたネイティブの PostgreSQL 論理レプリケーション機能に加えて、Aurora PostgreSQL は `pglogical` エクステンションもサポートしています。詳細については、「[pglogical を使用してインスタンス間でデータを同期する](Appendix.PostgreSQL.CommonDBATasks.pglogical.md)」を参照してください。

PostgreSQL 論理レプリケーションの詳細については、PostgreSQL ドキュメントの「[論理レプリケーション](https://www.postgresql.org/docs/current/logical-replication.html)」と「[論理デコーディングのコンセプト](https://www.postgresql.org/docs/current/logicaldecoding-explanation.html)」を参照してください。

**注記**  
PostgreSQL 16 では、リードレプリカからの論理デコードのサポートが追加されました。この機能は Aurora PostgreSQL ではサポートされていません。