ALTER SUBSCRIPTION — サブスクリプションの定義を変更する
ALTER SUBSCRIPTIONname
CONNECTION 'conninfo
' ALTER SUBSCRIPTIONname
SET PUBLICATIONpublication_name
[, ...] [ WITH (publication_option
[=value
] [, ... ] ) ] ALTER SUBSCRIPTIONname
ADD PUBLICATIONpublication_name
[, ...] [ WITH (publication_option
[=value
] [, ... ] ) ] ALTER SUBSCRIPTIONname
DROP PUBLICATIONpublication_name
[, ...] [ WITH (publication_option
[=value
] [, ... ] ) ] ALTER SUBSCRIPTIONname
REFRESH PUBLICATION [ WITH (refresh_option
[=value
] [, ... ] ) ] ALTER SUBSCRIPTIONname
ENABLE ALTER SUBSCRIPTIONname
DISABLE ALTER SUBSCRIPTIONname
SET (subscription_parameter
[=value
] [, ... ] ) ALTER SUBSCRIPTIONname
SKIP (skip_option
=value
) ALTER SUBSCRIPTIONname
OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER SUBSCRIPTIONname
RENAME TOnew_name
ALTER SUBSCRIPTION
はCREATE SUBSCRIPTIONで指定できるサブスクリプションの属性のほとんどを変更できます。
ALTER SUBSCRIPTION
を使用するには、そのサブスクリプションを所有していなければなりません。
サブスクリプションの名前を変更したり、所有者を変更したりするには、データベースに対するCREATE
権限が必要です。
さらに、所有者を変更するには、新しい所有者ロールに対してSET ROLE
ができなければなりません。
所有者を変更するには、また、そのロールは型のスキーマにおいてCREATE
権限を持たなければなりません。
サブスクリプションがpassword_required=false
である場合、スーパーユーザのみが変更できます。
パブリケーションを更新するときには、もうパブリケーションの一部ではないリレーションを削除し、存在すればテーブル同期スロットも削除します。 リモートホストでサブスクリプションのために割り当てられたリソースを解放するために、これらのスロットを解放することが必要です。 ネットワーク切れやその他のエラーによりPostgreSQLがスロットを削除できなかった場合、エラーが報告されます。 この状況で処理を進めるためには、ユーザは操作を再度試みるか、または、スロットをサブスクリプションから切り離し、DROP SUBSCRIPTIONで説明するようサブスクリプションを削除することが必要です。
コマンドALTER SUBSCRIPTION ... REFRESH PUBLICATION
とrefresh
オプションがtrue
のALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ...
、そしてALTER SUBSCRIPTION ... SET (failover = true|false)
は、トランザクションブロック内では実行できません。
サブスクリプションがtwo_phase
コミットを有効にしている場合でも、copy_data
がfalse
でない限り、コマンドALTER SUBSCRIPTION ... REFRESH PUBLICATION
とrefresh
オプションがtrue
のALTER SUBSCRIPTION ... {SET|ADD|DROP} PUBLICATION ...
は実行できません。
実際の2相状態を知るには、pg_subscription
のsubtwophasestate
列を参照してください。
name
#属性の変更の対象となるサブスクリプションの名前です。
CONNECTION 'conninfo
'
#この句では、元はCREATE SUBSCRIPTIONにより設定された接続文字列を置き換えます。 詳細な情報はそちらを参照してください。
SET PUBLICATION publication_name
ADD PUBLICATION publication_name
DROP 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)の操作について追加のオプションを指定します。
以下のオプションがサポートされています。
ENABLE
#以前に無効化されたサブスクリプションを有効化し、トランザクションの終了時に論理レプリケーションワーカーを起動します。
DISABLE
#実行中のサブスクリプションを無効化し、トランザクションの終了時に論理レプリケーションワーカーを停止します。
SET ( subscription_parameter
[= value
] [, ... ] )
#
この句では、元はCREATE SUBSCRIPTIONにより設定されたパラメータを変更します。
詳細な情報はそちらを参照してください。
変更できるパラメータは、
slot_name
、
synchronous_commit
、
binary
、
streaming
、
disable_on_error
、
password_required
、
run_as_owner
、
origin
、
failover
です。
スーパーユーザだけがpassword_required = false
を設定できます。
slot_name
を変更する際、指定されたスロットのfailover
とtwo_phase
の値が、サブスクリプションで指定された対応するfailover
およびtwo_phase
パラメータと異なる可能性があります。
スロットを作成する際、スロットプロパティのfailover
およびtwo_phase
が対応するサブスクリプションパラメータと一致することを確認してください。
そうしないと、パブリッシャー上のスロットがこれらサブスクリプションオプションで指定されている内容とは異なる動作をする場合があります。
例えば、サブスクリプションオプションのfailover
が無効になっていても、パブリッシャー上のスロットがスタンバイと同期されたり、逆にサブスクリプションオプションのfailover
が有効になっている場合でも、同期が行われなかったりする可能性があります。
SKIP ( skip_option
= value
)
#
リモートトランザクションのすべての変更の適用をスキップします。
受信データが何らかの制約に違反している場合、解決されるまで論理レプリケーションは停止します。
ALTER SUBSCRIPTION ... SKIP
コマンドを使用すると、論理レプリケーションワーカーはトランザクション内のすべてのデータ修正変更をスキップします。
このオプションは、サブスクライバーでtwo_phase
を有効にしてすでに準備されているトランザクションには影響しません。
論理レプリケーションワーカーがトランザクションをスキップするかトランザクションを終了ことに成功した後、LSN(pg_subscription
.subskiplsn
に格納されています)がクリアされます。
論理レプリケーションの競合の詳細については29.6を参照してください。
skip_option
は、この操作のオプションを指定します。
サポートされているオプションは以下の通りです。
lsn
(pg_lsn
)
論理レプリケーションワーカーによって変更がスキップされるリモートトランザクションの終了LSNを指定します。
終了LSNは、トランザクションがコミットまたは準備されるLSNです。
個々のサブトランザクションのスキップはサポートされません。
NONE
を設定すると、LSNがリセットされます。
new_owner
#サブスクリプションの新しい所有者のユーザ名です。
new_name
#サブスクリプションの新しい名前です。
boolean
型のパラメータを指定する場合、=
value
の部分を省略できます。これはTRUE
を指定するのと同じです。
サブスクリプションがサブスクライブするパブリケーションをinsert_only
に変更します。
ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;
サブスクリプションを無効化(停止)します。
ALTER SUBSCRIPTION mysub DISABLE;
ALTER SUBSCRIPTION
はPostgreSQLの拡張です。