タイプ: string
コンテキスト: sighup
再起動: false

synchronous-replicationで説明されているように、同期レプリケーションをサポート可能なスタンバイサーバのリストを指定します。活動中の同期スタンバイサーバは1つまたはそれ以上です。コミットを待機しているトランザクションは、このスタンバイサーバがそのデータの受信を確認してから処理の継続が許可されます。同期スタンバイサーバはこのリストに名前が挙げられていており、現時点で接続され、そしてデータをリアルタイムでストリーミングしているものです(pg_stat_replication ビューにおいてstreaming状態として示されています)。このリストの後の方に記載されているその他のスタンバイサーバは潜在的に同期スタンバイサーバになることを示しています。二つ以上の同期スタンバイサーバ名を指定することで、かなりの高可用性とデータ損失に対する保護が得られます。

この目的のためのスタンバイサーバ名は、スタンバイの接続情報で指定された、スタンバイのapplication_name設定です。物理レプリケーションスタンバイでは、primary_conninfo設定です。デフォルトはcluster_nameの設定で、さもなければwalreceiverです。論理レプリケーションでは、サブスクリプションの接続情報で設定でき、デフォルトはサブスクリプション名です。それ以外のレプリケーションストリームコンシューマーについては、それぞれのドキュメントをご覧ください。

このパラメータは、以下の構文のいずれかを用いてスタンバイサーバのリストを指定します。[FIRST] num_sync ( standby_name [, ...] )ANY num_sync ( standby_name [, ...] )standby_name [, ...]ここで、num_syncは、トランザクションが応答を待機する必要のある同期スタンバイの数です。standby_nameは、スタンバイサーバの名前です。FIRSTANYは、リスト中のサーバーから同期スタンバイを選ぶ方法を指定します。

キーワードFIRSTnum_syncと組み合わせると、優先度に基づく同期レプリケーションを指定し、優先度に基づいて選ばれたnum_sync個の同期スタンバイにWALレコードがレプリケーションされるまで、トランザクションのコミットは待機します。たとえばFIRST 3 (s1, s2, s3, s4)とすると、s1s2s3s4の中から選ばれた優先順位の高い3つのスタンバイサーバが応答を返すまでコミットは待機します。リストの中で前の方に名前が出現するスタンバイには高い優先度が与えられ、同期と見なされます。それ以外のリストの中で後の方に名前が上がっているスタンバイサーバーは、潜在的な同期スタンバイであることを表しています。どんな理由であれ、現在の同期スタンバイが切断されると、次に高い優先度を持つスタンバイに直ちに取って代わられます。キーワードFIRSTはオプションです。

キーワードANYnum_syncと組み合わせると、クォーラムに基づく同期レプリケーションを指定し、列挙されたスタンバイのうち少なくともnum_sync個の同期スタンバイにWALレコードがレプリケーションされるまで、トランザクションのコミットを待たせます。たとえばANY 3 (s1, s2, s3, s4)とすると、s1s2s3s4のうちの少なくとも3つが応答を返した時点でコミットが進行します。

FIRSTANYは、大文字小文字を区別しません。もしこれらのキーワードをスタンバイサーバの名前に使う場合は、standby_nameは二重引用符で囲わなければなりません。

3番目の構文は、PostgreSQL9.6よりも前のバージョンで用いられていたもので、依然としてサポートされています。最初の構文で、FIRSTnum_syncを1とした時と同じです。たとえば、FIRST 1 (s1, s2)s1, s2は同じ意味です。s1s2が同期スタンバイとして選ばれます。

特別なエントリ*は、すべてのスタンバイ名に一致します。

スタンバイの一意性を強要する仕組みはありません。重複があった場合、一致したスタンバイは優先順位が高いと見なされますが、どれが選ばれるかは非決定的です。

各々のstandby_nameは、*である場合を除き、SQL識別子の形式を取らなければなりません。二重引用符を用いることもできます。しかし、二重引用符の有無に関わらず、standby_nameとスタンバイのアプリケーション名の比較は、大文字小文字の区別なしに行われることに注意してください。

ここに同期スタンバイ名が指定されていない場合、同期レプリケーションは有効とはならず、トランザクションコミットはレプリケーションを待機しません。これがデフォルトの設定です。同期レプリケーションが有効であっても、synchronous_commitパラメータをlocal または offに設定することにより、個別のトランザクションをレプリケーションに対して待機しないように設定できます。

このパラメータは、postgresql.confファイル、もしくはサーバコマンドラインでのみ設定可能です。

推奨事項 [EN]

Special, see syntax for sync standby config. Don't get into this if you're not sure what you're doing.

件のコメント