مرکزی مواد پر جائیں
友田 陽大
PostgreSQL operations & reliability
PostgreSQL
アーキテクチャ設計
パフォーマンス

PostgreSQL 本番運用ガイド(v18対応):壊さない・止めない・詰まらせない・守る・進化させるの5原則

PostgreSQL を本番で安全に運用するための体系ガイド。バックアップとPITR(壊さない)、レプリケーション/HAとゼロダウンタイム変更(止めない)、接続プーリングと監視(詰まらせない)、ロール/TLS/SCRAMのセキュリティ(守る)、メジャーアップグレード(進化させる)までを、公式ドキュメント(v18)に忠実な実コードと運用手順で解説します。マネージド(RDS/Aurora/Cloud SQL)とセルフホストの判断軸も。

Published
Reading time
11 min read
Author
友田 陽大
شیئر کریں

データベースの性能を上げる話(パフォーマンスチューニング総論)と、データベースを本番で安全に運用し続ける話は別物です。後者で問われるのは「速さ」ではなく——壊れたとき戻せるか、落ちたとき止まらないか、混んだとき詰まらないか、攻撃されたとき守れるか、進化させるとき止めずに済むか

この記事は、PostgreSQL を本番で運用するための全体地図です。バックアップ・HA・接続・監視・セキュリティ・アップグレードを、「事故が起きる前提」で並べ直します。各論は個別記事に譲り、本稿は運用の意思決定と優先順位に集中します。受託開発で「Postgres を任せて大丈夫か」を見極める発注者にも、運用を引き継ぐエンジニアにも効く内容です。

この記事のルール:仕様・既定値・PostgreSQL 18 の新機能は PostgreSQL 18 公式ドキュメント(2026年6月時点) に基づきます。PgBouncer・RDS 等のベンダー固有事項はその旨を明記します。マネージドサービスは多くの運用を代行するため、ここで述べる手作業の一部は不要になります(その境界も本文で示します)。


1. 本番運用の5つの問い

運用設計は、次の5つに答えられれば8割完成します。上から「失うと致命的」な順です。

#問い失敗すると武器深掘り
1壊さないデータ消失(=廃業級)バックアップ・PITR§2 / バックアップ記事
2止めない(障害時)ダウンタイム・SPOFレプリケーション・HAHA記事
3止めない(変更時)デプロイで全断ゼロダウンタイムDDL無停止DDL記事
4詰まらせない接続枯渇・スロー化接続プーリング・監視接続プーリング記事
5守る情報漏洩・不正アクセス最小権限・TLS・SCRAMセキュリティ記事
+進化させる塩漬け・EOL無停止アップグレード論理レプリケーション記事

2. 壊さない:バックアップは「戻せる」が正義

最も重い問いから。**バックアップの目的は「取ること」ではなく「戻せること」**です。テストしていない復旧手順は、存在しないのと同じ。

PostgreSQL のバックアップは公式に3方式(詳細はバックアップ&PITR記事)。

方式何ができる限界
論理(pg_dump稼働中に一貫スナップショット。可搬・選択復元・バージョン跨ぎDB単位。ロール/テーブルスペースは別途 pg_dumpall
物理(ファイル)クラスタ丸ごとコピーサーバー停止が必須(または pg_basebackup
継続的アーカイブ(WAL)ベースバックアップ+WAL継続退避で任意の時点に復旧(PITR)設定が複雑・クラスタ単位

決定的な違いは**RPO(どれだけ失うか)**です。

  • 夜次の pg_dump → 最悪、前回ダンプ以降(最大24時間)を失う。
  • 継続的アーカイブ → 公式曰く「ベースバックアップ以降の任意の時点に復旧できる」。WAL を退避し続けるので、データ損失はほぼゼロにできる。

発注者・運用者への含意:本番の基幹DBで「夜次ダンプだけ」は危険です。継続的アーカイブ(またはマネージドの PITR) を前提に、さらに「復旧訓練を定期実施」して初めて「壊さない」が成立します。マネージド(RDS/Aurora/Cloud SQL)はスナップショット+WALアーカイブを自動化し、archive_commandpg_basebackup を手で運用せずに PITR を提供します(ベンダー機能)。


3. 止めない(障害時):レプリケーションとHA

サーバーは壊れます。ディスクは飛び、AZは落ちる。SPOF(単一障害点)を作らないのが「止めない」の核心です。

PostgreSQL の主要なHAは物理ストリーミングレプリケーション——プライマリのWALをスタンバイへ流し、ほぼ最新の複製を待機させます(詳細はHA記事)。同期/非同期を選べ、リードレプリカで読み取りを逃がせます。

ここで最重要の事実(公式が明記):

PostgreSQL は、プライマリの障害を検知してスタンバイに通知するシステムソフトウェアを提供しない

つまり PostgreSQL コアは自動フェイルオーバーを内蔵していません。障害検知・昇格(pg_promote())・IPの付け替え・スプリットブレイン防止(STONITH)は、Patroni などの外部ツールで組む必要があります。

これがマネージドの最大の価値です。RDS/Aurora の Multi-AZ は、この「検知+自動フェイルオーバー+エンドポイント切替」を代行します。自前運用なら Patroni 等の構築・運用コストを見積もる必要があり、この一点だけでもマネージドを選ぶ理由になり得ます

同期/非同期は耐久性とレイテンシのトレードオフです。synchronous_commit の既定は onsynchronous_standby_names が空なら非同期(コミットはスタンバイを待たない=速いが、プライマリ全損時に直近のコミットを失い得る)。「1件も失えない」要件なら同期を選び、レイテンシ増を受け入れます。


4. 止めない(変更時):ゼロダウンタイムDDL

障害だけでなく、自分のデプロイでも本番は止まります。ALTER TABLE の多くは ACCESS EXCLUSIVE ロックを取り、公式の定義どおりSELECT すらブロックします。

危険なのは「ロック待ちの連鎖」です。長時間クエリの後ろでマイグレーションがロック待ちに入ると、その後ろに新規クエリが全部積み上がり、実質全断になります。対策(詳細は無停止DDL記事):

-- マイグレーションは「世界を止める前に諦める」。短い lock_timeout で即失敗させ、リトライする
SET lock_timeout = '3s';
ALTER TABLE orders ADD COLUMN note text;   -- 定数デフォルトなら PG11+ で書き換え不要=高速
  • 列追加:定数デフォルトはテーブルを書き換えず高速。volatile なデフォルトは全書き換え(避ける)。
  • NOT NULL / 制約ADD CONSTRAINT ... NOT VALID(即コミット)→ VALIDATE CONSTRAINT(弱いロックで検証)の2段階。
  • 索引CREATE INDEX CONCURRENTLY(書き込みを止めない)。
  • PostgreSQL 18 は NOT NULL 制約に NOT VALID を付与可能になり、無停止の NOT NULL 追加がより素直になりました。

5. 詰まらせない:接続プーリングと監視

接続は「プロセス」

PostgreSQL は接続ごとにOSプロセスを1つ forkします(公式アーキテクチャ)。max_connections の既定は 100。これを上げるのは解決策ではありません——各バックエンドはメモリを消費し、work_memバックエンド単位で乗算されるからです。

正解は接続プーリング。アプリ↔DB の間にプーラー(PgBouncer 等)を挟み、物理接続を少数で使い回す。特にサーバーレス(Lambda/エッジ)は直結厳禁——スパイク時に接続ストームで max_connections を突破して落ちます。トランザクションモードのプーラー(PgBouncer / RDS Proxy / Supabase Supavisor)が必須です(詳細・注意点は接続プーリング記事)。

監視は「症状」で鳴らす

最低限、これは常時見ます。

-- 詰まりの兆候:長時間 active / idle in transaction / ロック待ち
SELECT pid, state, wait_event_type, wait_event,
       now() - xact_start AS xact_age, substring(query,1,50) AS query
FROM pg_stat_activity
WHERE state <> 'idle'
ORDER BY xact_start;
  • pg_stat_statements:重いクエリの特定(総論 §2)。
  • pg_stat_user_tables:肥大化(n_dead_tup)と autovacuum の効き(MVCC/VACUUM記事)。
  • レプリケーション遅延pg_stat_replicationreplay_lag
  • 接続使用率max_connections に対する使用数。
  • 周回リスクage(datfrozenxid)MVCC/VACUUM記事 §7)。

6. 守る:最小権限・ネットワーク・暗号化

セキュリティは「クライアントを信じない」から始まります(詳細はセキュリティ堅牢化記事)。要点だけ。

  • アプリをスーパーユーザーで動かさない。公式曰くスーパーユーザーは「すべての権限チェックを迂回する」。アプリ専用の最小権限ロール(必要なDMLだけ)を作る。
  • pg_hba.conf は上から最初の一致で認証が決まる(公式)。scram-sha-256 を使い、hostssl でTLSを強制し、送信元IP・DB・ユーザーで絞る。trust は厳禁。
  • パスワードは SCRAMpassword_encryption の既定は scram-sha-256MD5 は PG18 で非推奨CREATE/ALTER ROLE が警告、将来削除予定)。
  • クライアントは sslmode=verify-fullrequire は暗号化するが証明書を検証しない=中間者攻撃を防げない。
  • PostgreSQL 18 は OAuth 2.0 認証を追加(pg_hba.confoauth メソッド)。

7. 進化させる:止めずにアップグレードする

PostgreSQL のメジャーは毎年リリースされ、各メジャーは約5年でEOL。塩漬けは脆弱性とEOLのリスクです。アップグレードは2択(詳細は論理レプリケーション&アップグレード記事)。

  • pg_upgrade(インプレース):短い停止で済む。PG18 は並列チェック(--jobs--swap(ディレクトリ入替で最速)、統計の引き継ぎでさらに短時間化。
  • 論理レプリケーション(最小停止):新バージョンのインスタンスへ論理複製し、追いついたら切替。公式曰く「数秒のダウンタイム」で済む。ただしDDL とシーケンスは複製されないため、切替時にシーケンスを手で進める必要があります(この落とし穴は記事で詳述)。

8. マネージド vs セルフホスト:運用負荷で選ぶ

ここまでの「手作業」の多くを、マネージドは代行します。判断軸は**性能やコスト以上に「運用負荷」**です。

運用項目セルフホストマネージド(RDS/Aurora/Cloud SQL 等)
バックアップ/PITRarchive_commandpg_basebackup を自前構築自動スナップショット+PITR
HA/自動フェイルオーバーPatroni 等を自前構築(コア機能外)Multi-AZ で自動
マイナーアップグレード/パッチ自分で計画・適用メンテナンスウィンドウで実施
監視自前(Prometheus 等)CloudWatch 等に統合
チューニングの自由度最大(拡張・OS設定も自由)一部制限(許可リスト・パラメータグループ)
コストサーバー実費(運用人件費は別)プレミアム(運用込み)

判断の指針:少人数チーム・運用要員が薄いならマネージド一択に近い。特に自動フェイルオーバーとPITRを自前で正しく作る労力は大きい。逆に、特殊な拡張やOSレベルの制御、極限のコスト最適化が要件ならセルフホスト。「Postgres を任せたい」という発注の多くは、この運用負荷を外注したいというニーズです。


9. 本番運用チェックリスト

リリース前に、この問いに答えられますか。

  1. 戻せるか:継続的アーカイブ/PITR が有効で、復旧訓練を実施済みか。
  2. 落ちても止まらないか:スタンバイがあり、フェイルオーバー手順(自動/手動)が確立しているか。
  3. デプロイで止まらないか:マイグレーションが lock_timeout+無停止パターンで書かれているか。
  4. 詰まらないか:接続プーラーがあり、max_connections に余裕があるか。
  5. 守れているか:アプリは最小権限ロールか。TLS強制・SCRAM・最小 pg_hba か。
  6. 進化できるか:メジャーアップグレードの手順(停止許容時間)が決まっているか。
  7. 見えているか:重いクエリ・肥大化・レプリ遅延・接続使用率・周回リスクが監視されているか。

10. まとめ

  • 本番運用は5つの問い——壊さない/止めない(障害・変更)/詰まらせない/守る/進化させる。
  • バックアップは「戻せる」が正義。継続的アーカイブ/PITR +復旧訓練。
  • コアは自動フェイルオーバーを持たない。外部ツール(Patroni 等)かマネージドで補う。
  • 接続はプロセス。サーバーレスはトランザクションモードのプーラー必須。
  • 変更も無停止でlock_timeoutNOT VALIDVALIDATECONCURRENTLY
  • マネージドは運用負荷を外注する手段。少人数なら有力。
  • PG18 は非同期I/O・アップグレード高速化(--swap)・OAuth認証で運用を底上げ。

この運用シリーズでは、各レイヤーを実コードと手順で深掘りします。まずは事故対策の本丸——バックアップ&PITR接続プーリング から。


参考(PostgreSQL 18 公式ドキュメント)

友田

友田 陽大

وزیر (METI) ایوارڈ یافتہ پروڈکٹ کے ڈویلپر۔ TypeScript + Python + AWS کے ساتھ میں SaaS، صنعتی ڈیجیٹل تبدیلی اور پروڈکشن کے قابل جنریٹو اے آئی (RAG) تنہا ابتدا سے انتہا تک فراہم کرتا ہوں — تقاضوں کی تعیین سے انفراسٹرکچر اور آپریشن تک۔

Got a challenge?

From design to implementation and operations — solo × generative AI

Implementation like this article's, end to end from requirements to production. Start with a free 30-minute technical consult and tell me about your situation.

پروجیکٹ کی بنیاد پر کام اور تکنیکی مشاورت دونوں کے لیے دستیاب ہوں۔ 30 منٹ کی مفت مشاورت سے آغاز کریں۔

最短ルート:カレンダーから直接予約

相談内容が固まっている方は、フォーム送信よりその場で日程を確定する方がスムーズです。下記から空き時間をお選びください。

  • 30分のオンライン無料相談
  • Google Meet / Zoom / Microsoft Teams
  • NDA 商談前締結可・無理な営業はいたしません
無料相談の空き枠を予約する

یہ بھی پڑھنے کے قابل