すべてのプロダクト
Search
ドキュメントセンター

PolarDB:サブスクリプションの作成

最終更新日:May 31, 2024

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_nameNONEに設定されている場合、サブスクリプションに関連付けられたレプリケーションスロットはありません。 これは、複製スロットが後で手動で作成される場合に使用できます。 このようなサブスクリプションには、enabledcreate_slotの両方がfalseに設定されている必要があります。

  • synchronous_commit (enum ): このパラメーターの値は、このサブスクリプションの適用ワーカープロセス内のsynchronous_commit設定をオーバーライドします。 デフォルト値はoffです。

    論理レプリケーションにはオフを使用しても安全です。同期が失われたためにサブスクライバがトランザクションを失った場合、データはパブリッシャーから再び送信されます。

    同期論理レプリケーションを行うときは、別の設定が適切な場合があります。 論理レプリケーションワーカーは、書き込みとフラッシュの位置をパブリッシャーに報告し、同期レプリケーションを使用する場合、パブリッシャーは実際のフラッシュを待ちます。 つまり、同期レプリケーションにサブスクリプションを使用する場合、サブスクライバーのsynchronous_commitoffに設定すると、パブリッシャーのCOMMITのレイテンシが増加する可能性があります。

  • connect (boolean ): CREATE SUBSCRIPTIONをパブリッシャーに接続するかどうかを指定します。 これをfalseに設定すると、enabledcreate_slotcopy_dataのデフォルト値がfalseに変更されます。

    connect setをfalseenabledcreate_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);