第30章 論理レプリケーション

目次

30.1. パブリケーション
30.2. サブスクリプション
30.2.1. レプリケーションスロットの管理
30.3. コンフリクト
30.4. 制限事項
30.5. アーキテクチャ
30.5.1. 初期スナップショット
30.6. 監視
30.7. セキュリティ
30.8. 構成設定
30.9. 簡単な設定

論理レプリケーションとは、レプリケーションアイデンティティ(replication identity)(通常は主キーです)に基づき、データオブジェクトと、それに対する変更を複製する手法です。 この論理という用語は、正確なブロックアドレスを使い、バイト同士の複製を行う物理レプリケーションと対比的に使用しています。 PostgreSQLは両方の仕組みを同時にサポートします。 第26章をご覧ください。 論理レプリケーションにより、データの複製とセキュリティに対するきめの細かい制御が可能になります。

論理レプリケーションは、ひとつのパブリッシャー(publisher)ノード上の一つ以上のパブリケーション(publications)を購読する一つ以上のサブスクライバー(subscribers)を伴う、パブリッシュ(publish)サブスクライブ(subscribe)モデルを使用します。 サブスクライバーは、サブスクライブするパブリケーションからデータを取得し、再パブリッシュしてカスケードレプリケーションや、更に複雑な構成を構築することができます。

テーブルの論理レプリケーションは、通常、パブリッシャーのデータベース上のデータのスナップショットを取り、サブスクライバーにコピーすることから始まります。 それが完了したあとは、パブリッシャーにおける変更は、発生した時にリアルタイムでサブスクライバーに送られます。 サブスクライバーはパブリッシャーと同じ順にデータを適用します。 そのため、一つのサブスクリプション内のパブリケーションに対するトランザクションの一貫性が保証されます。 この方式によるデータレプリケーションは、トランザクショナルレプリケーション(transactional replication)と呼ばれることがあります。

典型的な論理レプリケーションの利用例には、以下のようなものがあります。

サブスクライバーのデータベースは、他のPostgreSQLインスタンスと同様に振る舞い、自分用のパブリケーションを定義することにより、他のデータベースに対するパブリッシャーとして利用できます。 アプリケーションがそのサブスクライバーを読み取り専用として取り扱うときには、単独のサブスクリプションからはコンフリクトは発生しません。 一方、アプリケーションあるいは他のサブスクライバーから同じテーブルに書き込みが起こるとすると、コンフリクトが発生する可能性があります。