ALTER PUBLICATION — パブリケーションの定義を変更する
ALTER PUBLICATIONname
ADDpublication_object
[, ...] ALTER PUBLICATIONname
SETpublication_object
[, ...] ALTER PUBLICATIONname
DROPpublication_object
[, ...] ALTER PUBLICATIONname
SET (publication_parameter
[=value
] [, ... ] ) ALTER PUBLICATIONname
OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER PUBLICATIONname
RENAME 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
には、実行するユーザーがスーパーユーザであることが必要です。
所有者を変更するには、新しい所有ロールの直接的あるいは間接的なメンバーでもなければなりません。
新しい所有者は、データベースに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の拡張です。