Kodrill

設定ファイル

OSS-DB Silver

postgresql.conf の書き方と反映のタイミング・接続と認証・クライアント接続の既定値・ログ/pg_hba.conf/SET・SHOW・pg_settings

問題数
20 問
合格ライン
70%
実行して確認済み
6 問
この分野の要点を読む6 章・約 9 分。実行して確かめたコード例と、試験でよくある引っかけをまとめています

ログインなしで試す

無料の 5 問を、1問ごとに正誤と解説を見ながら解けます。解答は保存されません。

5 問を試す

無料登録して学習を記録する

学習履歴・ダッシュボード・ブックマーク・模試モードが使えます。

★ 残り 15 問はプレミアム会員限定です

無料プランでは先頭 5 問まで解けます。プレミアムなら全問題・苦手問題の復習・広告非表示が使えます。
料金プランを見る

問題と解説を見る (無料)

登録しなくても、次の5問は問題文と解説をそのまま読めます。

設定ファイルの要点

内容の確認日: 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 列で分かります。

SQL
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 など)

SQL
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 で変えようとするとエラーになります。

SQL
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() でも同じことができます。

SQL
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 など

SQL
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 と SET

    SET LOCAL はトランザクションの終わりで戻ります。SET もロールバックすれば取り消されます。

  • listen_addresses の既定値

    既定は 'localhost' です。外部から接続するには、変更と再起動に加えて pg_hba.conf の許可も必要です。

  • pg_hba.conf は最初に一致した行

    後の行に、より狭い範囲の許可があっても使われません。許可したい行を先に書きます。

  • log_min_messages の順番

    サーバーのログでは LOG が ERROR より上です。error にすると WARNING 以下は記録されません。

問題で確認する

この分野の問題を、解説つきで読めます (登録不要)。

出典・参考

コード例は、PostgreSQL 14 で実際に実行して結果を確認しています。