CREATE PUBLICATIONは、現在のデータベースに新しいパブリケーションを追加します。
説明
CREATE PUBLICATIONは、現在のデータベースに新しいパブリケーションを追加します。 パブリケーション名は、現在のデータベース内の既存のパブリケーションの名前とは異なる必要があります。
パブリケーションとは、基本的には、データの変更が論理レプリケーションによってレプリケートされることを目的としたテーブルのグループです。
概要
出版名の作成
[FOR TABLE [のみ] table_name [ * ] [, ...]
| すべてのテーブルのために]
[WITH ( publication_parameter [= value] [, ... ] ) ] パラメーター
name: 新しいパブリケーションの名前。
FOR TABLE: パブリケーションに追加するテーブルのリストを指定します。 テーブル名の前にONLYを指定した場合、そのテーブルのみがパブリケーションに追加されます。 ONLYが指定されていない場合、テーブルとそのすべての子孫テーブル (存在する場合) が追加されます。 必要に応じて、テーブル名の後に * を指定して、子孫テーブルが含まれることを明示的に示すことができます。 ただし、これはパーティションテーブルには適用されません。 パーティションテーブルのパーティションは、常に暗黙的にパブリケーションの一部と見なされるため、パブリケーションに明示的に追加されることはありません。
パブリケーションの一部にできるのは、永続ベーステーブルとパーティションテーブルだけです。 一時テーブル、未ログテーブル、外部テーブル、マテリアライズドビュー、および通常のビューをパブリケーションの一部にすることはできません。
パーティション分割テーブルがパブリケーションに追加されると、その既存のパーティションと将来のパーティションはすべて、パブリケーションの一部であると暗黙的に見なされます。 そのため、パーティションで直接実行される操作でさえ、その祖先が一部である出版物を介して公開されます。
FOR ALL TABLES: 将来作成されるテーブルを含む、データベース内のすべてのテーブルの変更をレプリケートするパブリケーションとしてパブリケーションをマークします。
WITH (publication_parameter [= value] [, ... ] ):
publish(string): このパラメーターは、新しいパブリケーションによってサブスクライバーにパブリッシュされるDML操作を決定します。 値はカンマ区切りの操作リストです。 許可される操作は、insert、update、delete、truncateです。 デフォルトではすべてのアクションを公開するため、このオプションのデフォルト値は'insert, update, delete, truncate'です。publish_via_partition_root(boolean): このパラメーターは、パブリケーションに含まれるパーティションテーブル (またはそのパーティション) の変更を、実際に変更される個々のパーティションではなく、パーティションテーブルのIDとスキーマを使用してパブリッシュするかどうかを決定します。後者がデフォルトです。 これを有効にすると、変更を非パーティション分割テーブルまたは異なるパーティションのセットで構成されるパーティション分割テーブルにレプリケートできます。これを有効にすると、パーティションに対して直接実行される
TRUNCATE操作はレプリケートされません。
注
FOR TABLEもFOR ALL TABLESも指定されていない場合、公開は空のテーブルセットで開始されます。 これは、テーブルを後で追加する場合に便利です。
パブリケーションの作成はレプリケーションを開始しません。 それは、将来の加入者のためのグループ化およびフィルタリングロジックのみを定義する。
パブリケーションを作成するには、呼び出し元のユーザーに、現在のデータベースに対するcreate権限が必要です。 (もちろん、スーパーユーザーはこのチェックをバイパスします。)
テーブルをパブリケーションに追加するには、呼び出し元のユーザーがテーブルの所有権を持っている必要があります。 FOR ALL TABLES句では、呼び出し元のユーザーがスーパーユーザーである必要があります。
UPDATEおよび /またはDELETE操作を発行するパブリケーションに追加されるテーブルには、REPLICA IDENTITYが定義されている必要があります。 そうでない場合、それらの操作はそれらのテーブルで許可されません。
挿入物のために... CONFLICTコマンドでは、パブリケーションはコマンドの結果の操作を公開します。 結果に応じて、INSERTまたはUPDATEとして公開されるか、まったく公開されない場合があります。
COPY... FROMコマンドは、INSERT操作として発行されます。
DDLoperationsは公開されません。
例
2つのテーブルですべての変更を公開するパブリケーションを作成します。
CREATE PUBLICATION mypublication FOR TABLEユーザー、部門;すべてのテーブルのすべての変更を公開するパブリケーションを作成します。
すべてのテーブルの出版物alltablesを作成します。1つのテーブルでINSERT操作のみを公開するパブリケーションを作成します。
CREATE PUBLICATION insert_only FOR TABLE mydata
WITH (publish = 'insert');