postgresql.conf
===============

TPAは、さまざまな\ ``.conf`` ファイルを含む\ ``conf.d``
ディレクトリを作成し、メインの\ ``postgresql.conf`` で\ ``include_dir``
を使用して、これらの追加の構成ファイルを使用します。

Postgres構成ファイル（postgresql.conf、pg_ident.conf、およびpg_hba.conf）と\ ``conf.d``
の下に含まれるファイルは、常に\ ``postgres_conf_dir``
に保存されます。これはデフォルトでは\ ``postgres_data_dir``
と同じですが、構成をデータディレクトリとは別にしたい場合は、別の場所に設定できます。

主な構成メカニズムは、変数を直接設定することです。

.. code:: yaml

   cluster_vars:
     temp_buffers: 16MB
     log_connections: on
     autovacuum_vacuum_cost_limit: -1
     effective_cache_size: 4GB
     max_connections: 300
     max_wal_senders: 32

TPAは構成を複数のファイルに分割します。
2つのメインファイルは\ ``0000-tpa.conf`` と\ ``0001-tpa_restart.conf``
です。これらには、それぞれ変更するにはサーバーのリロードまたは再起動が必要な設定が含まれています。展開中に、TPAは変更を正しいファイルに書き込み、必要に応じてPostgresをリロードまたは再起動します。

TPAは、特定の状況（オプションの拡張機能を構成するなど）で他のファイルを使用する場合がありますが、通常、特定のパラメーターがどこで正確に設定されているかを気にする必要はありません。

次に\ ``tpaexec deploy``
を実行したときに変更が上書きされる可能性があるため、\ ``conf.d``
の下のファイルは決して編集しないでください。

postgres_conf_settings
----------------------

TPAは、 ``temp_buffers`` や ``maintenance_work_mem``
などの変数を提供し、使用可能なpostgresql.conf設定の多く（すべてではありません）に直接設定できます。

``postgres_conf_settings``
を使用して、TPAで認識されるかどうかに関係なく、パラメーターを設定できます。
``postgresql.conf`` に表示されるとおりに値を引用する必要があります。

.. code:: yaml

   cluster_vars:
     effective_cache_size: 2GB
     postgres_conf_settings:
       effective_cache_size: 4GB
       authentication_timeout: 1min
       synchronous_standby_names: >-
         any 2 ("first", "second", "third")
       bdr.global_lock_statement_timeout: 60s

これは、TPAがネイティブに認識しない設定で最も役立ちますが、任意のパラメーターに使用できます（たとえば、
``effective_cache_size`` は変数として設定できますが、
``authentication_timeout`` はできません）。

これらの設定は\ ``conf.d/9900-role-settings.conf``
に書き込まれるため、他の方法で設定された変数よりも優先されます。

``postgres_conf_settings``
の下の値を変更した場合、TPAはリロードで変更を有効にできるかどうか、または再起動が必要かどうかを知る方法がありません。したがって、変更を有効にするために常にサーバーを再起動します。これが、可能な限り変数を直接使用することが常に好ましい理由です。

shared_buffers
--------------

デフォルトでは、TPAは\ ``shared_buffers``
を使用可能なメモリの25％に設定します（これは経験則であり、推奨事項ではありません）。このデフォルトをオーバーライドするには、
``shared_buffers_ratio: 0.35`` を設定して別の比率を使用するか、
``shared_buffers_mb: 796``
を特定のMB数に設定するか、正確な値を直接指定します（例：
``shared_buffers: "2GB"`` ）。

effective_cache_size
--------------------

デフォルトでは、TPAは\ ``effective_cache_size``
を使用可能なメモリの50％に設定します。このデフォルトをオーバーライドするには、
``effective_cache_size_ratio: 0.35`` を設定して別の比率を使用するか、
``effective_cache_size_mb: 796``
を特定のMB数に設定するか、正確な値を直接指定します（例：
``effective_cache_size: "8GB"`` ）。

shared_preload_libraries
------------------------

TPAは、 ``shared_preload_libraries``
のエントリが機能するために必要な拡張機能の内部リストを維持しており、そのような拡張機能を\ ``postgres_extensions``
に含めると、\ ``shared_preload_libraries`` が自動的に更新されます。

プリロードが必要な認識されない拡張機能を使用している場合は、それらを\ ``preload_extensions``
に追加できます。

.. code:: yaml

   cluster_vars:
     preload_extensions:
     - myext
     - otherext

``myext`` を\ ``postgres_extensions`` に追加すると、
``shared_preload_libraries`` には\ ``myext`` が含まれます。

デフォルトでは、\ ``shared_preload_libraries``
は\ ``conf.d/8888-shared_preload_libraries.conf`` に設定されます。

``shared_preload_libraries``
を変数として直接設定することはサポートされていません。通常は設定する必要はありませんが、やむを得ない場合は
 :ref:`postgres_conf_settings <postgres_conf_settings>` 
以下に全引用符で囲んだ値を設定できます。この場合、値は\ ``conf.d/9900-tpa_postgres_conf_settings.conf``
に設定されます。

手で変更する
------------

TPAで生成された構成の内容をオーバーライドするには、2つの方法があります。

最初の（そして推奨される）オプションは、 ``ALTER SYSTEM``
を使用することです。これは、常に構成ファイル内のすべてのファイルよりも優先されます。

.. code:: sql

   #  ALTER SYSTEM SET bdr.global_lock_statement_timeout TO 60s;

``conf.d/9999-override.conf`` を編集することもできます。

.. code:: bash

   $ echo "bdr.global_lock_statement_timeout=60s" >> conf.d/9999-override.conf

``conf.d``
の下の他のすべてのファイルは、構成が変更された場合、展開中に上書きされる可能性がありますが、TPAは最初に空のファイルを作成した後に\ ``9999-override.conf``
を変更しません。

変更する設定によっては、 ``SELECT pg_reload_conf()``
を実行するか、サーバーを再起動して変更を有効にする必要があります。

postgresql.confをゼロから生成する
---------------------------------

デフォルトでは、TPAは\ ``include_dir``
を追加する以外は、デフォルト（つまり\ ``initdb``
で生成された）のpostgresql.confファイルをそのままにします。通常、この動作をオーバーライドする必要はありませんが、
``postgres_conf_template`` を設定してオーバーライドできます。

.. code:: yaml

   cluster_vars:
     postgres_conf_template: pgconf.j2

これで、クラスターディレクトリの\ ``templates/pgconf.j2``
を使用してpostgresql.confが生成されます。
