Legacy synchronous replication using PGD
========================================

..  Warning Important::
   古い同期レプリケーションの代わりに :ref:`PGD Synchronous Commit <PGD Synchronous Commit>` を強くお勧めします。 !!!

Postgresは :ref:`physical streaming replication <Monitoring through SQL>` を提供します

PSR、これは一方向ですが :ref:`synchronous variant <Monitoring through SQL>`  を提供します。

下位互換性を維持するために、PGDは\ ``synchronous_commit``
および\ ``synchronous_standby_names``
を使用した同期レプリケーションの構成を引き続きサポートしています。
 :ref:`グループコミット <グループコミット>` または :ref:`PGD Synchronous Commit <PGD Synchronous Commit>` の使用を検討します

代わりに。

PGDレプリケーションオプションとは異なり、PSR同期は最初に持続し、コミットレコードのWALフラッシュの後にレプリケートします。

使用法
^^^^^^

PGDを使用した同期レプリケーションを有効にするには、関連するPGDピアノードのアプリケーション名を\ ``synchronous_standby_names``
に追加する必要があります。 ``FIRST x`` または\ ``ANY x``
を使用すると、非PGDスタンバイノードの要件と競合しない場合、ある程度の柔軟性が提供されます。

追加したら、 ``synchronous_commit``
を使用してトランザクションごとの同期レベルを構成できます。デフォルトは\ ``on``
です。この設定は、アプリケーション名を\ ``synchronous_standby_names``
に追加することにより、既に同期レプリケーションが有効になっていることを意味します。
``synchronous_commit`` を\ ``local`` または\ ``off``
に設定すると、同期レプリケーションがオフになります。

PGDは永続化する前にトランザクションを適用するため、値\ ``on``
および\ ``remote_apply`` は論理レプリケーションでは等価です。

比較
^^^^

次の表は、トランザクションが発行されたオリジンノードからCOMMIT確認を受信した後、クライアントがレプリケートされたピアノードから期待できることをまとめています。
Mode列は、バリアントに応じて異なる意味を持ちます。
PSRおよびPGDを使用した古い同期レプリケーションの場合、\ ``synchronous_commit``
設定を参照します。

.. csv-table::
  :header: Variant,Mode,Received,Visible,Durable
  :widths: auto
  :align: left
  :class: longtable

  PSR Async,off (default),no,no,no
  PSR Sync,remote_write (2),yes,no,no (3)
  PSR Sync,on (2),yes,no,yes
  PSR Sync,remote_apply (2),yes,yes,yes
  PGD Legacy Sync (1),remote_write (2),yes,no,no
  PGD Legacy Sync (1),on (2),yes,yes,yes
  PGD Legacy Sync (1),remote_apply (2),yes,yes,yes

*(1)代わりにグループコミットの使用を検討します。*

-  

   (2) ``synchronous_replication_availability`` を\ ``async'``
       に設定してローカルモードに切り替えない限り、許可されている場合。それ以外の場合、非同期PGDデフォルトの値が適用されます。

*(3)
OSに書き込まれ、OSが実行されたままでPostgresのみがクラッシュした場合に持続します。*

Postgres構成パラメーター
^^^^^^^^^^^^^^^^^^^^^^^^

次の表は、デフォルト以外の値に設定する必要がある構成設定reqと、オプショナルですが特定のバリアントに影響を与える構成設定の概要を提供します。

.. csv-table::
  :header: Setting (GUC),Group Commit,Lag Control,PSR,Legacy Sync
  :widths: auto
  :align: left
  :class: longtable

  synchronous_standby_names,n/a,n/a,req,req
  synchronous_commit,n/a,n/a,opt,opt
  synchronous_replication_availability,n/a,n/a,opt,opt

コミットスコープへの移行
^^^^^^^^^^^^^^^^^^^^^^^^

``synchronous_commit`` および\ ``synchronous_standby_names``
とは無関係に、PGDのグループコミット機能を構成します。代わりに、\ ``bdr.commit_scope``
GUCを使用すると、トランザクションごとにスコープを選択できます。また、各ノードで\ ``synchronous_standby_names``
を個別に構成するのではなく、グループコミットはグローバルに同期したコミットスコープを使用します。

..  Note ::
   `synchronous_standby_names` およびコミットスコープの文法は似ていますが、前者はオリジンノードを考慮していませんが、後者は考慮します。したがって、たとえば `synchronous_standby_names = 'ANY 1 (..)'` は、`ANY 2 (...)` のコミットスコープと同等です。この選択により、マジョリティに関する推論が簡単になり、起点ノードがトランザクションの耐久性と可視性にも貢献することを反映しています。 !!!
