目次
論理レプリケーションとは、レプリケーションアイデンティティ(replication identity)(通常は主キーです)に基づき、データオブジェクトと、それに対する変更を複製する手法です。 この論理という用語は、正確なブロックアドレスを使い、バイト同士の複製を行う物理レプリケーションと対比的に使用しています。 PostgreSQLは両方の仕組みを同時にサポートします。 第27章をご覧ください。 論理レプリケーションにより、データの複製とセキュリティに対するきめの細かい制御が可能になります。
論理レプリケーションは、ひとつのパブリッシャー(publisher)ノード上の一つ以上のパブリケーション(publications)を購読する一つ以上のサブスクライバー(subscribers)を伴う、パブリッシュ(publish)とサブスクライブ(subscribe)モデルを使用します。 サブスクライバーは、サブスクライブするパブリケーションからデータを取得し、再パブリッシュしてカスケードレプリケーションや、更に複雑な構成を構築することができます。
テーブルの論理レプリケーションは、通常、パブリッシャーのデータベース上のデータのスナップショットを取り、サブスクライバーにコピーすることから始まります。 それが完了したあとは、パブリッシャーにおける変更は、発生した時にリアルタイムでサブスクライバーに送られます。 サブスクライバーはパブリッシャーと同じ順にデータを適用します。 そのため、一つのサブスクリプション内のパブリケーションに対するトランザクションの一貫性が保証されます。 この方式によるデータレプリケーションは、トランザクショナルレプリケーション(transactional replication)と呼ばれることがあります。
典型的な論理レプリケーションの利用例には、以下のようなものがあります。
一つのデータベース、あるいはデータベースの一部に起こった更新の差分を、発生都度サブスクライバーに送る。
サブスクライバーに更新が到着した時に、それぞれの更新に対してトリガーを起動する。
複数のデータベースを一つのデータベースに統合する。(たとえば分析目的で。)
異なるメジャーバージョンのPostgreSQL間でレプリケーションする。
異なるプラットフォーム上のPostgreSQLインスタンス間(たとえばLinuxからWindows)でレプリケーションする。
異なるユーザのグループに対して、複製されたデータにアクセスさせる。
複数のデータベース間でデータベースの一部を共有する。
サブスクライバーのデータベースは、他のPostgreSQLインスタンスと同様に振る舞い、自分用のパブリケーションを定義することにより、他のデータベースに対するパブリッシャーとして利用できます。 アプリケーションがそのサブスクライバーを読み取り専用として取り扱うときには、単独のサブスクリプションからはコンフリクトは発生しません。 一方、アプリケーションあるいは他のサブスクライバーから同じテーブルに書き込みが起こるとすると、コンフリクトが発生する可能性があります。