ALTER SUBSCRIPTION — サブスクリプションの定義を変更する
ALTER SUBSCRIPTIONnameCONNECTION 'conninfo' ALTER SUBSCRIPTIONnameSET PUBLICATIONpublication_name[, ...] [ WITH (publication_option[=value] [, ... ] ) ] ALTER SUBSCRIPTIONnameADD PUBLICATIONpublication_name[, ...] [ WITH (publication_option[=value] [, ... ] ) ] ALTER SUBSCRIPTIONnameDROP PUBLICATIONpublication_name[, ...] [ WITH (publication_option[=value] [, ... ] ) ] ALTER SUBSCRIPTIONnameREFRESH PUBLICATION [ WITH (refresh_option[=value] [, ... ] ) ] ALTER SUBSCRIPTIONnameENABLE ALTER SUBSCRIPTIONnameDISABLE ALTER SUBSCRIPTIONnameSET (subscription_parameter[=value] [, ... ] ) ALTER SUBSCRIPTIONnameSKIP (skip_option=value) ALTER SUBSCRIPTIONnameOWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER SUBSCRIPTIONnameRENAME TOnew_name
ALTER SUBSCRIPTIONはCREATE SUBSCRIPTIONで指定できるサブスクリプションの属性のほとんどを変更できます。
ALTER SUBSCRIPTIONを使用するには、そのサブスクリプションを所有していなければなりません。
所有者を変更するには、新しい所有ロールの直接的あるいは間接的メンバーでもなければなりません。
新しい所有者はスーパーユーザである必要があります。
(現在は、すべてのサブスクリプションの所有者はスーパーユーザでなければならず、そのため所有者のチェックは実際には回避されます。
しかしこれは将来、変更されるかもしれません。)
パブリケーションを更新するときには、もうパブリケーションの一部ではないリレーションを削除し、存在すればテーブル同期スロットも削除します。 リモートホストでサブスクリプションのために割り当てられたリソースを解放するために、これらのスロットを解放することが必要です。 ネットワーク切れやその他のエラーによりPostgreSQLがスロットを削除できなかった場合、エラーが報告されます。 この状況で処理を進めるためには、ユーザは操作を再度試みるか、または、スロットをサブスクリプションから切り離し、DROP SUBSCRIPTIONで説明するようサブスクリプションを削除することが必要です。
コマンドALTER SUBSCRIPTION ... REFRESH PUBLICATIONとrefreshオプションがtrueのALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ...は、トランザクションブロック内では実行できません。
サブスクリプションがtwo_phaseコミットを有効にしている場合でも、copy_dataがfalseでない限り、これらのコマンドは実行できません。
実際の2相状態を知るには、pg_subscriptionのsubtwophasestate列を参照してください。
name属性の変更の対象となるサブスクリプションの名前です。
CONNECTION 'conninfo'この句では、元はCREATE SUBSCRIPTIONにより設定された接続文字列を置き換えます。 詳細な情報はそちらを参照してください。
SET PUBLICATION publication_nameADD PUBLICATION publication_nameDROP PUBLICATION publication_name
この形式はサブスクライブするパブリケーションのリストを変更します。
SETはパブリケーションのリスト全体を新しいリストで置き換え、ADDは追加のパブリケーションをパブリケーションのリストに追加し、DROPはパブリケーションをパブリケーションのリストから削除します。
ユーザーが後から追加できるよう存在しないパブリケーションをADDやSETで指定することを許容します。
詳細はCREATE SUBSCRIPTIONを参照してください。
デフォルトでは、このコマンドはREFRESH PUBLICATIONのような動作もします。
publication_optionは、この操作についての追加のオプションを指定します。
以下のオプションがサポートされています。
refresh (boolean)
falseにすると、このコマンドはテーブルを情報を更新しません。
後で別にREFRESH PUBLICATIONを実行することになります。
デフォルトはtrueです。
さらに、暗黙の更新動作を制御するためにREFRESH PUBLICATIONの項で説明されているオプションを指定できます。
REFRESH PUBLICATION
不足しているテーブル情報をパブリッシャーから取得します。
CREATE SUBSCRIPTION、あるいは最後のREFRESH PUBLICATIONの実行の後でサブスクライブ対象のパブリケーションに追加されたテーブルの複製が、これにより開始されます。
refresh_optionは更新(refresh)の操作について追加のオプションを指定します。
以下のオプションがサポートされています。
copy_data (boolean)
サブスクライブ対象のパブリケーションにある既存のデータが、レプリケーションの開始時にコピーされるかどうかを指定します。
デフォルトはtrueです。
テーブルの行フィルターWHERE句が変更されていても、以前にサブスクライブされたテーブルはコピーされません。
ENABLE以前に無効化されたサブスクリプションを有効化し、トランザクションの終了時に論理レプリケーションワーカーを起動します。
DISABLE実行中のサブスクリプションを無効化し、トランザクションの終了時に論理レプリケーションワーカーを停止します。
SET ( subscription_parameter [= value] [, ... ] )
この句では、元はCREATE SUBSCRIPTIONにより設定されたパラメータを変更します。
詳細な情報はそちらを参照してください。
変更できるパラメータはslot_name、synchronous_commit、binary、streaming、disable_on_errorです。
SKIP ( skip_option = value )
リモートトランザクションのすべての変更の適用をスキップします。
受信データが何らかの制約に違反している場合、解決されるまで論理レプリケーションは停止します。
ALTER SUBSCRIPTION ... SKIPコマンドを使用すると、論理レプリケーションワーカーはトランザクション内のすべてのデータ修正変更をスキップします。
このオプションは、サブスクライバでtwo_phaseを有効にしてすでに準備されているトランザクションには影響しません。
論理レプリケーションワーカーがトランザクションをスキップするかトランザクションを終了ことに成功した後、LSN(pg_subscription.subskiplsnに格納されています)がクリアされます。
論理レプリケーションの競合の詳細については31.5を参照してください。
このコマンドを使用するには、スーパーユーザ権限が必要です。
skip_optionは、この操作のオプションを指定します。
サポートされているオプションは以下の通りです。
lsn (pg_lsn)
論理レプリケーションワーカーによって変更がスキップされるリモートトランザクションの終了LSNを指定します。
終了LSNは、トランザクションがコミットまたは準備されるLSNです。
個々のサブトランザクションのスキップはサポートされません。
NONEを設定すると、LSNがリセットされます。
new_ownerサブスクリプションの新しい所有者のユーザ名です。
new_nameサブスクリプションの新しい名前です。
サブスクリプションがサブスクライブするパブリケーションをinsert_onlyに変更します。
ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;
サブスクリプションを無効化(停止)します。
ALTER SUBSCRIPTION mysub DISABLE;
ALTER SUBSCRIPTIONはPostgreSQLの拡張です。