設定ファイルの要点
内容の確認日: 2026-10-29
この分野は出題範囲の S2.3 (設定ファイル) に当たり、50 問中およそ 5 問が出題されます。出題範囲では、postgresql.conf のうち「記述方法」「接続と認証」「クライアント接続デフォルト」「エラー報告とログ取得」の 4 つと、pg_hba.conf・SET・SHOW が挙げられています。
大事なのは、設定項目ごとに いつ・どうすれば反映されるか (再起動・reload・SET) を区別できることです。pg_settings の context 列を手がかりに整理しましょう。
postgresql.conf の書き方
1 行に 項目名 = 値 を書きます (= は省略可)。# から行末まではコメントで、同じ項目を複数回書くと 最後のもの が使われます。文字列の値は単一引用符で囲みます。
メモリや時間の値には '128MB'・'5min' のように単位を付けられます。単位を省くと、項目ごとの基本の単位で解釈されます (work_mem は kB、statement_timeout は ms)。基本の単位は pg_settings の unit 列で分かります。
SET work_mem = 2048;SHOW work_mem;SELECT unit FROM pg_settings WHERE name = 'work_mem';psql -A -t -P null=NULL -f example.sql 2MB kB
ALTER SYSTEM SET 項目 = 値 は、データベースクラスタの postgresql.auto.conf に設定を書き込みます。このファイルは postgresql.conf の後に読まれるので、同じ項目なら ALTER SYSTEM の値が優先されます。書き込むだけなので、反映には項目に応じて reload か再起動が必要です。
反映のタイミングと pg_settings の context
・postmaster: サーバーの再起動が必要 (max_connections・shared_buffers・listen_addresses・port・logging_collector など)
・sighup: 設定ファイルを変えて reload すれば反映。SET では変えられない (log_line_prefix・log_destination など)
・superuser: スーパーユーザーなら SET で変えられる (log_min_duration_statement・log_min_messages など)
・user: どのユーザーでも SET で変えられる (work_mem・search_path・statement_timeout・TimeZone など)
SELECT name, context FROM pg_settings WHERE name IN ('max_connections', 'log_line_prefix', 'work_mem') ORDER BY name;psql -A -t -P null=NULL -f example.sql log_line_prefix|sighup max_connections|postmaster work_mem|user
reload は pg_ctl reload か、SQL の SELECT pg_reload_conf(); で行います。postmaster の項目を SET で変えようとするとエラーになります。
SET max_connections = 200;psql -A -t -P null=NULL -f example.sql
エラー (SQLSTATE 55P02)
SET・SET LOCAL・RESET・SHOW
SET で変えた値はセッションが終わるまで、SET LOCAL はトランザクションが終わるまで有効です。SET の変更もトランザクションの一部なので、ロールバックすると取り消されます。RESET 項目 (RESET ALL) は既定値に戻し、SHOW 項目 (SHOW ALL) は現在の値を表示します。関数の current_setting()・set_config() でも同じことができます。
SET work_mem = '8MB';BEGIN;SET LOCAL work_mem = '16MB';SHOW work_mem;COMMIT;SHOW work_mem;RESET work_mem;SELECT current_setting('work_mem');psql -A -t -P null=NULL -f example.sql 16MB 8MB 4MB
接続と認証・クライアント接続の既定値・ログ
・listen_addresses: 待ち受けるアドレス。既定は 'localhost' で、外部から接続するには '*' などに変えて再起動する
・port: 既定は 5432
・max_connections: 最大の接続数 (既定 100)。そのうち superuser_reserved_connections (既定 3) はスーパーユーザー専用
・password_encryption: パスワードを保存する方式。14 の既定は scram-sha-256
・search_path: スキーマ名を省いたときに探すスキーマの順番。既定は "$user", public
・statement_timeout: 1 つの文の実行時間の上限 (0 は無制限)。超えると文がキャンセルされる
・default_transaction_isolation・client_encoding・TimeZone・DateStyle など
CREATE SCHEMA sales;CREATE TABLE public.items (name text);CREATE TABLE sales.items (name text);INSERT INTO public.items VALUES ('public');INSERT INTO sales.items VALUES ('sales');SELECT name FROM items;SET search_path = sales, public;SELECT name FROM items;psql -A -t -P null=NULL -f example.sql public sales
ログは、logging_collector = on (再起動が必要) で log_directory (既定 log) の log_filename のファイルに書き出されます。log_min_messages は記録する重要度の下限 (既定 warning。重要度は低い順に DEBUG5〜DEBUG1・INFO・NOTICE・WARNING・ERROR・LOG・FATAL・PANIC)、log_min_duration_statement は指定したミリ秒以上かかった文を記録 (-1 で無効、0 ですべて)、log_statement は記録する文の種類 (none・ddl・mod・all)、log_line_prefix は各行の先頭の情報 (%m 時刻・%p プロセス ID・%u ロール・%d データベース) です。
pg_hba.conf
クライアント認証の設定で、1 行に「接続の種類・データベース・ユーザー・接続元のアドレス・認証方式」を書きます。
# TYPE DATABASE USER ADDRESS METHODlocal all all peerhost sales app 192.168.1.0/24 scram-sha-256hostssl all all 0.0.0.0/0 scram-sha-256host replication repl 10.0.0.5/32 scram-sha-256・接続の種類: local は Unix ドメインソケット、host は TCP/IP (SSL の有無を問わない)、hostssl は SSL の TCP/IP だけ、hostnossl は SSL でない TCP/IP だけ
・DATABASE の replication は、データベース名ではなく、レプリケーションの接続に一致するキーワード
・認証方式: trust (確かめずに許可)・reject (拒否)・scram-sha-256・md5・password (平文)・peer (OS のユーザー名とロール名の一致。local で使う) など
接続ごとに 上の行から順に照らし合わせ、最初に一致した行だけ が使われます。一致する行がなければ拒否されます。変更は reload で反映されます。
試験でよくある引っかけ
単位を付けない値
SET work_mem = 2048;は 2048 バイトではなく 2048 kB (2MB) です。項目ごとの基本の単位で解釈されます。reload で反映されない項目
max_connections・shared_buffers・listen_addresses・port・logging_collectorは再起動が必要です。ALTER SYSTEMの書き込み先postgresql.confではなくpostgresql.auto.confに書かれ、こちらが優先されます。すぐには反映されません。SET LOCALとSETSET LOCALはトランザクションの終わりで戻ります。SETもロールバックすれば取り消されます。listen_addressesの既定値既定は
'localhost'です。外部から接続するには、変更と再起動に加えてpg_hba.confの許可も必要です。pg_hba.confは最初に一致した行後の行に、より狭い範囲の許可があっても使われません。許可したい行を先に書きます。
log_min_messagesの順番サーバーのログでは
LOGがERRORより上です。errorにするとWARNING以下は記録されません。
問題で確認する
この分野の問題を、解説つきで読めます (登録不要)。
出典・参考
- LPI-Japan「OSS-DB Silver」(出題範囲)
- PostgreSQL 14 文書「パラメータの設定」
- PostgreSQL 14 文書「エラー報告とログ取得」
- PostgreSQL 14 文書「pg_hba.conf ファイル」
コード例は、PostgreSQL 14 で実際に実行して結果を確認しています。