パブリケーションは、どのような物理レプリケーションのプライマリにも定義できます。 パブリケーションが定義されたノードは、パブリッシャーと呼ばれます。 パブリケーションは、テーブルか、テーブルのグループから生成された更新の集合であると同時に、更新セットあるいはレプリケーションセットであるとも言えます。 一つのパブリケーションは一つのデータベースにのみ存在します。
パブリケーションはスキーマとは異なり、テーブルがどのようにアクセスされるかには影響しません。
必要ならば、テーブルを複数のパブリケーションに追加できます。
今のところパブリケーションはテーブルとスキーマのすべてのテーブルのみを含むことができます。
パブリケーションがALL TABLES
で作られた場合を除き、オブジェクトは明示的に追加されなければなりません。
パブリケーションは、生成される更新を、INSERT
、UPDATE
、DELETE
、TRUNCATE
のうちのどのような組み合わせにも制限することができます。
これはトリガーが特定のイベント型によって起動されることに似ています。
デフォルトでは、すべての操作タイプがレプリケーションされます。
これらのパブリケーション指定はDML操作にのみ適用され、初期データ同期コピーには影響しません(行フィルタはTRUNCATE
には影響しません。31.3を参照してください)
パブリッシュされたテーブルは、UPDATE
とDELETE
をレプリケーションできるようにするために、レプリカアイデンティティの設定を含んでいなければなりません。
そうすることにより、サブスクライバー側で更新または削除する対象の正しい行が特定できるようになります。
デフォルトでは主キーがあれば、それがレプリカアイデンティティになります。
他に、ユニークキー(追加の要件を伴います)もレプリカアイデンティティにできます。
テーブルに適当なキーがなければ、レプリカアイデンティティをFULL
にできます。
これは、行全体がキーになることを意味します。
レプリカアイデンティティFULL
を指定すると、行の検索にサブスクライバー側でインデックスが使えます。
候補となるインデックスはBツリーでなければならず、部分的であってはなりません。そして、左端のインデックスのフィールドはパブリッシュされたテーブル列を参照する(式でない)列でなければなりません。
一意でないインデックスの属性に関するこれらの制限は、主キーに強制される制限の一部に準拠しています。
そのような適切なインデックスがない場合には、サブスクライバー側での検索は非常に非効率なる可能性があるので、レプリカアイデンティティFULL
は他の解決方法がない場合のみの代替手段にすべきです。
FULL
以外のレプリカアイデンティティがパブリッシャー側に設定されている場合、同じか、より少ない列を含むレプリカアイデンティティがサブスクライバー側に設定されていなければなりません。
レプリカアイデンティティを設定する詳細な方法については、REPLICA IDENTITY
をご覧ください。
UPDATE
あるいはDELETE
操作をレプリケーションするパブリケーションに、レプリカアイデンティティがないテーブルが追加されると、以後UPDATE
あるいはDELETE
操作が行われるとパブリッシャー側でエラーが発生します。
INSERT
操作は、レプリカアイデンティティの設定に関わらず実行されます。
すべてのパブリケーションは、複数のサブスクライバーを持つことができます。
パブリケーションは、CREATE PUBLICATION
コマンドで作成し、対応するコマンドで変更や削除ができます。
個々のテーブルはALTER PUBLICATION
で動的に追加削除できます。
ADD TABLE
およびDROP TABLE
操作はトランザクションの対象です。
ひとたびトランザクションがコミットされれば、正しいスナップショットでテーブルのレプリケーションが開始あるいは終了されます。