ALTER PUBLICATION — パブリケーションの定義を変更する
ALTER PUBLICATIONnameADDpublication_object[, ...] ALTER PUBLICATIONnameSETpublication_object[, ...] ALTER PUBLICATIONnameDROPpublication_object[, ...] ALTER PUBLICATIONnameSET (publication_parameter[=value] [, ... ] ) ALTER PUBLICATIONnameOWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER PUBLICATIONnameRENAME TOnew_nameここでpublication_objectは以下のいずれかです。 TABLE [ ONLY ]table_name[ * ] [ (column_name[, ... ] ) ] [ WHERE (expression) ] [, ... ] TABLES IN SCHEMA {schema_name| CURRENT_SCHEMA } [, ... ]
コマンドALTER PUBLICATIONはパブリケーションの属性を変更できます。
最初の3つの構文では、パブリケーションにどのテーブル/スキーマが含まれるかを変更します。
SET句は、パブリケーションのテーブル/スキーマのリストを指定したリストで置き換えます。パブリケーション内の既存のテーブル/スキーマは削除されます。
ADD句とDROP句はパブリケーションに1つ以上のテーブル/スキーマを追加または削除します。
既にサブスクライブされているパブリケーションにテーブル/スキーマを追加した場合、それを有効にするにはサブスクライブしている側でALTER SUBSCRIPTION ... REFRESH PUBLICATIONの操作を行う必要があることに注意してください。
DROP TABLES IN SCHEMAはFOR TABLE/ADD TABLEを使って指定されたスキーマテーブルを削除せず、WHERE句のついたDROPとの組み合わせは認められていないことにも注意してください。
このコマンドの概要に挙げられている4番目の構文では、CREATE PUBLICATIONで指定されたすべてのパブリケーションの属性を変更できます。 このコマンドで属性を指定しなかったものについては、以前の設定が保持されます。
残りの構文では、パブリケーションの所有者および名前を変更します。
ALTER PUBLICATIONを使用するには、そのパブリケーションを所有していなければなりません。
パブリケーションにテーブルを追加するには、さらにそのテーブルを所有していることが必要です。
パブリケーションへのADD TABLES IN SCHEMAとSET TABLES IN SCHEMAには、実行するユーザーがスーパーユーザであることが必要です。
所有者を変更するには、新しい所有者ロールに対してSET ROLEができなければなりません。また、そのロールはデータベースにCREATE権限を持っていなければなりません。
また、FOR ALL TABLESやFOR TABLES IN SCHEMAのパブリケーションの新しい所有者はスーパーユーザでなければなりません。
しかし、スーパーユーザはこれらの制限に関わらずパブリケーションの所有者を変更できます。
パブリケーションが列リストを持つテーブルもパブリッシュする場合、またはその逆の場合のスキーマの追加/設定はサポートされていません。
name定義の変更の対象となる既存のパブリケーションの名前です。
table_name
既存のテーブルの名前です。
テーブル名の前にONLYが指定されたときは、そのテーブルだけが影響を受けます。
テーブル名の前にONLYが指定されていないときは、そのテーブルとそのすべての子テーブル(あれば)が影響を受けます。
オプションでテーブル名の後に*を指定して、子テーブルが含まれることを明示的に示すことができます。
オプションで、列リストを指定できます。 詳細はCREATE PUBLICATIONを参照してください。 同じテーブルが異なる列リストでパブリッシュされた複数のパブリケーションを持つサブスクリプションはサポートされていないことに注意してください。 列リストを変更するときに発生する可能性のある問題の詳細は警告: 複数のパブリケーションからの列リストの統合を参照してください。
オプションのWHERE句が指定されている場合、expressionが偽またはNULLと評価される行はパブリッシュされません。
式を括弧で囲む必要があることに注意してください。
expressionは、レプリケーション接続に使用されるロールで評価されます。
schema_name既存のスキーマの名前。
SET ( publication_parameter [= value] [, ... ] )この句では、元はCREATE PUBLICATIONにより設定されたパブリケーションのパラメータを変更します。 詳細な情報はそちらを参照してください。
new_ownerパブリケーションの新しい所有者のユーザ名です。
new_nameパブリケーションの新しい名前です。
deleteとupdateのみをパブリッシュするようにパブリケーションを変更します。
ALTER PUBLICATION noinsert SET (publish = 'update, delete');
パブリケーションにいくつかのテーブルを追加します。
ALTER PUBLICATION mypublication ADD TABLE users (user_id, firstname), departments;
テーブルのパブリッシュする列のセットを変更します。
ALTER PUBLICATION mypublication SET TABLE users (user_id, firstname, lastname), TABLE departments;
パブリケーションsales_publicationにスキーマmarketingとsalesを追加します。
ALTER PUBLICATION sales_publication ADD TABLES IN SCHEMA marketing, sales;
パブリケーションproduction_publicationにテーブルusers、departments、スキーマproductionを追加します。
ALTER PUBLICATION production_publication ADD TABLE users, departments, TABLES IN SCHEMA production;
ALTER PUBLICATIONはPostgreSQLの拡張です。