CREATE SUBSCRIPTION
は、現在のデータベースに新しいサブスクリプションを追加します。
説明
CREATE SUBSCRIPTION
は、現在のデータベースに新しいサブスクリプションを追加します。 サブスクリプション名は、データベース内の既存のサブスクリプションの名前とは異なる必要があります。
サブスクリプションは、パブリッシャへのレプリケーション接続を表します。 したがって、このコマンドは、ローカルカタログに定義を追加するだけでなく、パブリッシャーにレプリケーションスロットも作成します。
論理レプリケーションワーカーは、このコマンドが実行されるトランザクションのコミット時に、新しいサブスクリプションのデータのレプリケートを開始します。
概要
サブスクリプションの作成subscription_name
接続 'conninfo'
出版物publication_name [, ...]
[WITH ( subscription_parameter [= value] [, ... ] ) ]
パラメーター
subscription_name
: 新しいサブスクリプションの名前。
CONNECTION
'conninfo
: パブリッシャーへの接続文字列。
PUBLICATION
publication_name
: 購読するパブリッシャーのパブリケーションの名前。
WITH (
subscription_parameter
[=
value
] [, ... ] )
: この句は、サブスクリプションのオプションのパラメーターを指定します。 以下のパラメーターがサポートされます。
copy_data
(boolean
): レプリケーションの開始後に、サブスクライブされているパブリケーションの既存のデータをコピーするかどうかを指定します。 デフォルトはtrue
です。create_slot
(boolean
): コマンドがパブリッシャーにレプリケーションスロットを作成するかどうかを指定します。 デフォルトはtrue
です。enabled
(boolean
): サブスクリプションをアクティブにレプリケートするかどうか、またはセットアップだけでまだ開始されていないかどうかを指定します。 デフォルトはtrue
です。slot_name
(string
): 使用するレプリケーションスロットの名前。 デフォルトの動作は、スロット名にサブスクリプションの名前を使用することです。slot_name
がNONE
に設定されている場合、サブスクリプションに関連付けられたレプリケーションスロットはありません。 これは、複製スロットが後で手動で作成される場合に使用できます。 このようなサブスクリプションには、enabled
とcreate_slot
の両方がfalse
に設定されている必要があります。synchronous_commit
(enum
): このパラメーターの値は、このサブスクリプションの適用ワーカープロセス内のsynchronous_commit
設定をオーバーライドします。 デフォルト値はoff
です。論理レプリケーションには
オフ
を使用しても安全です。同期が失われたためにサブスクライバがトランザクションを失った場合、データはパブリッシャーから再び送信されます。同期論理レプリケーションを行うときは、別の設定が適切な場合があります。 論理レプリケーションワーカーは、書き込みとフラッシュの位置をパブリッシャーに報告し、同期レプリケーションを使用する場合、パブリッシャーは実際のフラッシュを待ちます。 つまり、同期レプリケーションにサブスクリプションを使用する場合、サブスクライバーの
synchronous_commit
をoff
に設定すると、パブリッシャーのCOMMIT
のレイテンシが増加する可能性があります。connect
(boolean
):CREATE SUBSCRIPTION
をパブリッシャーに接続するかどうかを指定します。 これをfalse
に設定すると、enabled
、create_slot
、copy_data
のデフォルト値がfalse
に変更されます。connect
setをfalse
とenabled
、create_slot
、またはcopy_data
setをtrue
に結合することはできません。このオプションを
false
に設定すると接続が行われないため、テーブルはサブスクライブされないため、サブスクリプションを有効にした後は何もレプリケートされません。 ALTERサブスクリプションを実行する必要があります... テーブルをサブスクライブするためのREFRESH PUBLICATION
。
注
レプリケーションスロットを作成するとき (デフォルトの動作) 、トランザクションブロック内でCREATE SUBSCRIPTION
を実行することはできません。
同じデータベースクラスターに接続するサブスクリプションの作成 (たとえば、同じクラスター内のデータベース間でレプリケートする、または同じデータベース内でレプリケートする) は、レプリケーションスロットが同じコマンドの一部として作成されていない場合にのみ成功します。 それ以外の場合、CREATE SUBSCRIPTION
呼び出しはハングします。 これを機能させるには、レプリケーションスロットを個別に作成し (プラグイン名pgoutput
で関数pg_create_logical_replication_slot
を使用) 、パラメーターcreate_slot = false
を使用してサブスクリプションを作成します。 これは、将来のリリースで解除される可能性のある実装制限です。
例
パブリケーションmypublication
およびinsert_only
のテーブルをレプリケートし、コミット時にすぐにレプリケートを開始するリモートサーバーのサブスクリプションを作成します。
サブスクリプションの作成mysub
接続 'host=192.168.1.50 port=5432 user=foo dbname=foodb'
出版mypublication、insert_only;
insert_only
パブリケーションでテーブルをレプリケートし、後で有効になるまでレプリケートを開始しないリモートサーバーのサブスクリプションを作成します。
サブスクリプションの作成mysub
接続 'host=192.168.1.50 port=5432 user=foo dbname=foodb'
出版insert_only
WITH (enabled = false);