【実務・中級編】 設定ファイル(postgresql.confとpg_hba.conf) – PostgreSQL

「とりあえず動く状態にはなったけど、設定ファイルの中身は正直よくわかっていない……」

PostgreSQLを触り始めたばかりの頃、誰もが一度はそんな不安を抱えるものです。でも大丈夫。実務でPostgreSQLを扱う上で、この2つの設定ファイル——`postgresql.conf`と`pg_hba.conf`——を制する者は、DBの運用を制すると言っても過言ではありません。

今回は、教科書的な説明はさらっと流して、現場で「これだけは押さえておけ!」というポイントに絞って解説していきますね。

—

1. PostgreSQLの頭脳「postgresql.conf」

このファイルは、いわばPostgreSQLの「性格」を決める場所です。メモリの使い方からログの出し方まで、データベースの挙動のすべてがここに詰まっています。

よく触る主要パラメータのツボ

全部を覚える必要はありません。まずは以下の3つを意識するだけで、パフォーマンスの安定感が段違いになります。

  • `shared_buffers`: DBがデータをキャッシュするために使うメモリ量です。
  • 現場のヒント: 一般的にはOSの全メモリの25%程度が目安と言われますが、AWSやオンプレの環境に合わせてチューニングが必要です。ここが小さすぎると、ディスクI/Oが爆発してDBが悲鳴を上げます。
  • `work_mem`: ソートや結合処理に使うメモリです。
  • 現場のヒント: 欲張って大きくしすぎると、同時接続数が多いときにメモリ不足(OOM Killer)でDBが落ちます。基本は小さめにしておいて、特定の重いクエリが必要な時だけセッション単位で増やすのがプロのやり方です。
  • `max_connections`: 同時接続数の上限です。
  • 現場のヒント: これを増やせばいいと思っている人が多いですが、増やしすぎるとプロセス切り替えのオーバーヘッドで逆に遅くなります。コネクションプール(pgBouncerなど)を導入して、接続数を適切に管理する方が健全です。

編集した後は?

設定を変えたら、必ず`pg_reload_conf()`を実行するか、サーバーを再起動しましょう。`psql`から以下のコマンドを打てば、わざわざプロセスを再起動しなくても設定が反映されるので便利です。

SELECT pg_reload_conf();

—

2. データベースの門番「pg_hba.conf」

`postgresql.conf`が性格なら、`pg_hba.conf`は「誰を中に入れるか」を決めるセキュリティの要です。ここで設定をミスると、本番環境に誰でもアクセスできたり、逆に自分まで締め出されたりします。

設定の構造

このファイルは上から順に評価されます。だから、「厳しい制限を上に、緩い制限を下に」書くのが鉄則です。

TYPE DATABASE USER ADDRESS METHOD
host all all 192.168.1.0/24 scram-sha-256
host myapp_db web_user 10.0.0.5/32 scram-sha-256

  • TYPE: 接続方法(TCP/IPなら`host`、ローカルなら`local`)。
  • DATABASE: 対象のDB名。基本は`all`でいいですが、本番用DBなら明示的に制限する方が安心です。
  • ADDRESS: 接続を許可するIPアドレスの範囲。`0.0.0.0/0`なんて書くのは、家の鍵を全開にするようなもの。絶対NGです。
  • METHOD: 認証方式。今は`md5`よりも、より強固な`scram-sha-256`を使うのが当たり前です。

現場でよくある失敗

「設定を変えたのに繋がらない!」という時、`pg_hba.conf`の記述ミスが9割です。特に、IPアドレスの範囲指定ミスや、認証メソッドの不一致。

変更したら、まずは`pg_ctl reload`で設定を読み込ませて、ログファイルを確認する癖をつけてください。PostgreSQLのログには、どの行で拒否されたかが親切に書いてありますから。

—

最後に:設定は「運用」とセットで考える

設定ファイルをいじる時、一番怖いのは「何を変えたか忘れること」です。

1. バックアップを必ず取る: `cp postgresql.conf postgresql.conf.bak` を打たないうちは、怖くて作業できません。
2. 設定の意図をコメントに残す: なぜその値を設定したのか、いつ誰が変更したのかをファイル内にメモしておきましょう。半年後の自分が泣いて感謝します。

PostgreSQLは非常に懐の深いデータベースです。設定をチューニングして、クエリの実行計画が劇的に改善した時のあの快感。ぜひ皆さんも体験してください。

何か不明点があったら、いつでもまた聞いてくださいね。一緒に最高のDBを作り上げていきましょう!

コメント

タイトルとURLをコピーしました