バージョンごとのドキュメント一覧

29.1. パブリケーション #

<title>Publication</title>

A <firstterm>publication</firstterm> can be defined on any physical replication primary. The node where a publication is defined is referred to as <firstterm>publisher</firstterm>. A publication is a set of changes generated from a table or a group of tables, and might also be described as a change set or replication set. Each publication exists in only one database. パブリケーションは、どのような物理レプリケーションのプライマリにも定義できます。 パブリケーションが定義されたノードは、パブリッシャーと呼ばれます。 パブリケーションは、テーブルか、テーブルのグループから生成された更新の集合であると同時に、更新セットあるいはレプリケーションセットであるとも言えます。 一つのパブリケーションは一つのデータベースにのみ存在します。

Publications are different from schemas and do not affect how the table is accessed. Each table can be added to multiple publications if needed. Publications may currently only contain tables and all tables in schema. Objects must be added explicitly, except when a publication is created for <literal>ALL TABLES</literal>. パブリケーションはスキーマとは異なり、テーブルがどのようにアクセスされるかには影響しません。 必要ならば、テーブルを複数のパブリケーションに追加できます。 今のところパブリケーションはテーブルとスキーマのすべてのテーブルのみを含むことができます。 パブリケーションがALL TABLESで作られた場合を除き、オブジェクトは明示的に追加されなければなりません。

Publications can choose to limit the changes they produce to any combination of <command>INSERT</command>, <command>UPDATE</command>, <command>DELETE</command>, and <command>TRUNCATE</command>, similar to how triggers are fired by particular event types. By default, all operation types are replicated. These publication specifications apply only for DML operations; they do not affect the initial data synchronization copy. (Row filters have no effect for <command>TRUNCATE</command>. See <xref linkend="logical-replication-row-filter"/>). パブリケーションは、生成される更新を、INSERTUPDATEDELETETRUNCATEのうちのどのような組み合わせにも制限することができます。 これはトリガーが特定のイベント型によって起動されることに似ています。 デフォルトでは、すべての操作タイプがレプリケーションされます。 これらのパブリケーション指定はDML操作にのみ適用され、初期データ同期コピーには影響しません(行フィルタはTRUNCATEには影響しません。29.4を参照してください)

A published table must have a <firstterm>replica identity</firstterm> configured in order to be able to replicate <command>UPDATE</command> and <command>DELETE</command> operations, so that appropriate rows to update or delete can be identified on the subscriber side. By default, this is the primary key, if there is one. Another unique index (with certain additional requirements) can also be set to be the replica identity. If the table does not have any suitable key, then it can be set to replica identity <literal>FULL</literal>, which means the entire row becomes the key. When replica identity <literal>FULL</literal> is specified, indexes can be used on the subscriber side for searching the rows. Candidate indexes must be btree or hash, non-partial, and the leftmost index field must be a column (not an expression) that references the published table column. These restrictions on the non-unique index properties adhere to some of the restrictions that are enforced for primary keys. If there are no such suitable indexes, the search on the subscriber side can be very inefficient, therefore replica identity <literal>FULL</literal> should only be used as a fallback if no other solution is possible. If a replica identity other than <literal>FULL</literal> is set on the publisher side, a replica identity comprising the same or fewer columns must also be set on the subscriber side. See <xref linkend="sql-altertable-replica-identity"/> for details on how to set the replica identity. If a table without a replica identity is added to a publication that replicates <command>UPDATE</command> or <command>DELETE</command> operations then subsequent <command>UPDATE</command> or <command>DELETE</command> operations will cause an error on the publisher. <command>INSERT</command> operations can proceed regardless of any replica identity. 《マッチ度[94.753921]》パブリッシュされたテーブルは、UPDATEDELETEをレプリケーションできるようにするために、レプリカアイデンティティの設定を含んでいなければなりません。 そうすることにより、サブスクライバー側で更新または削除する対象の正しい行が特定できるようになります。 デフォルトでは主キーがあれば、それがレプリカアイデンティティになります。 他に、ユニークキー(追加の要件を伴います)もレプリカアイデンティティにできます。 テーブルに適当なキーがなければ、レプリカアイデンティティをfullにできます。 これは、行全体がキーになることを意味します。 しかし、これは非常に非効率なので、他の解決方法がない場合のみの代替手段にすべきです。 full以外のレプリカアイデンティティがパブリッシャー側に設定されている場合、同じか、より少ない列を含むレプリカアイデンティティがサブスクライバー側に設定されていなければなりません。 レプリカアイデンティティを設定する詳細な方法については、REPLICA IDENTITYをご覧ください。 UPDATEあるいはDELETE操作をレプリケーションするパブリケーションに、レプリカアイデンティティがないテーブルが追加されると、以後UPDATEあるいはDELETE操作が行われるとパブリッシャー側でエラーが発生します。 INSERT操作は、レプリカアイデンティティの設定に関わらず実行されます。

Every publication can have multiple subscribers. すべてのパブリケーションは、複数のサブスクライバーを持つことができます。

A publication is created using the <link linkend="sql-createpublication"><command>CREATE PUBLICATION</command></link> command and may later be altered or dropped using corresponding commands. パブリケーションは、CREATE PUBLICATIONコマンドで作成し、対応するコマンドで変更や削除ができます。

The individual tables can be added and removed dynamically using <link linkend="sql-alterpublication"><command>ALTER PUBLICATION</command></link>. Both the <literal>ADD TABLE</literal> and <literal>DROP TABLE</literal> operations are transactional; so the table will start or stop replicating at the correct snapshot once the transaction has committed. 個々のテーブルはALTER PUBLICATIONで動的に追加削除できます。 ADD TABLEおよびDROP TABLE操作はトランザクションの対象です。 ひとたびトランザクションがコミットされれば、正しいスナップショットでテーブルのレプリケーションが開始あるいは終了されます。