PostgreSQLのバージョンアップ手順を決める前の確認|サポート期限・方法の選び方・戻し方
PostgreSQLのメジャーバージョンを上げる前に確かめることを、公式の資料をもとに解説します。サポート期限の見方、ダンプと復元・pg_upgrade・論理レプリケーションの違い、pg_upgrade --checkでの検査、戻し方の決め方をまとめました。
目次
この記事でわかること
- PostgreSQLのサポート期限の確かめ方
- メジャーバージョンを上げる3つの方法の違い
- 上げる前に確かめることと、pg_upgrade --checkでの検査
- うまくいかなかったときの戻し方の決め方
自分でサーバーを運用していると、PostgreSQLの版が古くなり、サポートの期限が近づいてきます。ところが、メジャーバージョンを上げる作業は、マイナーバージョンの更新のように入れ替えるだけでは済みません。この記事では、上げる作業に入る前に決めておくことをまとめます。
もとにしたのは、PostgreSQLの公式の資料(Versioning Policy・アップグレードの章・pg_upgradeの説明)で、2026年10月29日に目を通しました。記事の中のコマンドは公式の資料に載っているもので、このサイトのサーバーで試したものではありません。
結論: 上げる前に「期限・方法・戻し方」の3つを決める
メジャーバージョンを上げる前に、いつまでに上げるか(期限)、どの方法で上げるか(方法)、失敗したときにどう戻すか(戻し方)の3つを決めます。 期限は公式のページの一覧で確かめ、方法はデータの大きさと止められる時間で選び、戻し方はバックアップと方法の組み合わせで決まります。
戻し方を決めないまま作業を始めると、途中で問題が出たときに、古い版へ戻れなくなることがあります。
メジャーバージョンとマイナーバージョンの違い
PostgreSQL 10からは、番号の最初の部分がメジャーバージョンです。16から17へ上げるのがメジャーバージョンの更新、16.4から16.5へ上げるのがマイナーバージョンの更新です。
マイナーバージョンを上げるときは、ダンプと復元は要りません。サーバーを止めて新しいプログラムに入れ替え、起動し直します。公式のページは、同じメジャーバージョンの最新のマイナーリリースを使うよう勧めています。
メジャーバージョンは違います。データのディレクトリの中身は、前の版との互換性が保たれません。そのため、ダンプと復元か、pg_upgradeのような専用の道具が必要になります。
サポート期限の確かめ方
公式のVersioning Policyのページによると、PostgreSQLはメジャーバージョンを最初のリリースから5年間支援します。その後、最後のマイナーバージョンが出て、支援が終わります。新しいメジャーバージョンは、およそ1年に1回出ます。
同じページの表に、版ごとの最初のリリースの日と、最後のリリースの日が載っています。2026年10月29日に見た表では、PostgreSQL 14は2026年11月12日が最後のリリースの日でした。日付は変わることがあるため、自分の版の行を公式のページで確かめます。
自分の版は、psqlで接続して確かめられます。
【用途】サーバーの版を確かめる /【実行場所】psql(DBに接続した状態) /【状態変更】なし(読み取りだけ)
SELECT version();
表示された文字列の最初にある「PostgreSQL」の後の数字が、いま動いている版です。
上げる方法は3つ
公式のアップグレードの章では、メジャーバージョンを上げる方法として3つを挙げています。
| 方法 | 止まる時間 | 向く場面 |
|---|---|---|
| ダンプと復元 | 長くなりやすい | 量が少ない |
| pg_upgrade | 短い | 量が多い |
| レプリケーション | 数秒 | 止められない |
ダンプと復元
昔からある方法はダンプと復元で、時間がかかることがあります。古い版からpg_dumpallでデータを書き出し、新しい版に読み込ませます。この方法では、pg_dumpallのような論理バックアップの道具を使う必要があり、ファイルをそのまま写すバックアップでは移せません。
公式の資料は、新しい版のpg_dumpとpg_dumpallを使うよう勧めています。今の版のダンプの道具は、9.2以降のサーバーから読み出せます。
【用途】すべてのDBを1つのファイルに書き出す /【実行場所】DBのサーバー(PostgreSQLの管理用のユーザー) /【状態変更】あり(ダンプのファイルを作る)
pg_dumpall > outputfile
書き出している間にデータが変わると、その変更はダンプに入りません。作業の間は、アプリからの書き込みを止めておきます。
pg_upgrade
pg_upgradeは、データのファイルを使い回して、新しい版の仕組みに合わせる道具です。公式の資料では、--linkの方式なら数分で終わることがあると説明しています。9.2以降から最新のメジャーバージョンへ上げられます。
実行するときは、新しい版のpg_upgradeを実行します。古い版で使っていた拡張機能がある場合は、拡張機能のファイルを、新しい版に合わせて入れておく必要があります。
論理レプリケーション
新しい版のサーバーを別に用意し、論理レプリケーションでデータを写し続けてから切り替える方法です。公式の資料では、切り替えで止まる時間は数秒だと説明しています。その代わり、2つのサーバーを並べて動かす準備が要ります。
どの方法にするかの判断
止める時間を長く取れて、データの量が少ないなら、ダンプと復元が分かりやすい方法です。止める時間を短くしたいならpg_upgrade、ほとんど止められないならレプリケーションを考えます。個人で運用している小さなサーバーなら、作業の時間を決めてアプリを止め、ダンプと復元かpg_upgradeで上げる形が多くなります。
上げる前に確かめること
リリースノートを読む
メジャーバージョンでは、使い方の変わる点が入ることがあります。公式の資料は、リリースノートの「Migration」の節を特に読むよう勧めています。間の版を飛ばして上げられますが、間のすべてのメジャーバージョンのリリースノートを読むよう勧めています。
アプリを新しい版で試す
公式の資料では、慎重に進めるなら、切り替える前に、アプリを新しい版で試すよう書いています。古い版と新しい版を並べて入れておき、アプリの動きを新しい版で確かめてから切り替えます。
pg_upgrade --checkで検査する
pg_upgradeには、検査だけを行う--checkという指定があります。古いサーバーを動かしたままでも実行でき、上げた後に手で直す点も教えてくれます。新しい版を入れ、新しいクラスタを作ってから実行します。
【用途】上げられるかを検査する /【実行場所】DBのサーバー(PostgreSQLの管理用のユーザー) /【状態変更】なし(検査だけ。古いクラスタは変えない)
pg_upgrade -b <古い版のbinのディレクトリ> -B <新しい版のbinのディレクトリ> -d <古い版のデータのディレクトリ> -D <新しい版のデータのディレクトリ> --check
--linkの方式で上げる予定なら、検査のときも--linkを付けて、その方式に固有の検査も行います。
戻し方を先に決める
pg_upgradeを使った後に古い版へ戻せるかは、使った方式で変わります。
- --checkだけなら、古いクラスタは変わりません。そのまま起動できます
- 既定のコピーの方式なら、古いクラスタはそのままで、起動し直せます
- --linkの方式では、新しいクラスタを起動した後は、古いクラスタを使うのは安全ではなく、バックアップから戻す必要があります
ダンプと復元の方法では、古い版のディレクトリを消さずに名前を変えておくと、問題が起きたときに戻りやすくなります。
どの方法でも、上げる前にバックアップを取り、取れたことを確かめておきます。このサイトでも、DBを変える作業の前には必ずバックアップを取り、取れたことを確かめてから進めています。設定ファイルを変えるときも、変える前の控えを取ってから置き換えています。バックアップの取り方と復元の確かめ方は、サーバーのバックアップと復元確認で紹介しています。
作業の前のチェックリスト
- [ ] 自分の版と、支援の終わる日を公式のページで確かめた
- [ ] 上げる先の版と、間の版のリリースノートの「Migration」の節を読んだ
- [ ] 方法(ダンプと復元・pg_upgrade・レプリケーション)を、データの量と止められる時間で決めた
- [ ] バックアップを取り、取れたことを確かめた
- [ ] pg_upgradeを使うなら、--checkで検査した
- [ ] 失敗したときの戻し方を、使う方式に合わせて決めた
- [ ] アプリを新しい版で動かして確かめた
つまずきやすいところ
- 古い版のpg_upgradeを実行する: pg_upgradeは、新しい版のものを使います
- ファイルを写すだけで移そうとする: メジャーバージョンが違うと、データのディレクトリをそのまま使えません
- --linkの後に戻ろうとする: 新しいクラスタを起動した後は、バックアップから戻すしかありません
- 拡張機能を入れ忘れる: 古い版で使っていた拡張機能のファイルは、新しい版にも入れておきます
- 統計情報を作り直さない: 上げた後には、最後に統計情報を作り直すコマンドの案内が出ます。終わったら案内に沿って実行します
PostgreSQLを入れてアプリ用のユーザーとDBを作る手順は、AlmaLinuxでPostgreSQLを構築しアプリ用のユーザーとDBを作る手順で、サーバーの作業をClaude Codeと進める流れは、Claude CodeでAlmaLinuxサーバーを構築・運用する方法で紹介しています。
まとめ
- メジャーバージョンを上げる前に、期限・方法・戻し方の3つを決めます
- 支援の期間は最初のリリースから5年で、終わる日は公式のページの表で確かめます
- 方法はダンプと復元・pg_upgrade・論理レプリケーションの3つで、データの量と止められる時間で選びます
- 間の版のリリースノートを読み、pg_upgrade --checkで検査してから上げます
- --linkの方式では古いクラスタに戻れなくなるため、上げる前のバックアップが欠かせません
よくある質問
メジャーバージョンとマイナーバージョンは、どう見分けますか?
PostgreSQL 10からは、番号の最初の部分がメジャーバージョン、2つ目の部分がマイナーバージョンです。たとえば16.4から16.5はマイナーバージョンの更新で、16から17がメジャーバージョンの更新です。
間の版を飛ばして、一度に新しい版へ上げてもよいですか?
公式の資料では、間の版を経由せずに上げられると説明しています。ただし、間にあるすべてのメジャーバージョンのリリースノートを読むよう勧めています。
pg_upgrade --checkを実行すると、データは変わりますか?
公式の資料では、--checkは検査だけを行い、古いクラスタは変わらないと説明しています。古いサーバーを動かしたままでも実行できます。新しい版を入れて、新しいクラスタを作っておく必要はあります。
--linkを使うと、何が変わりますか?
ファイルを写さないので速く終わり、ディスクの空きも少なくて済みます。その代わり、新しいクラスタを起動した後は古いクラスタを使えなくなり、戻すにはバックアップから復元します。
サポートが終わった版を使い続けると、どうなりますか?
支援が終わった版には、不具合やセキュリティの修正が出なくなります。支援の終わる日は公式のVersioning Policyのページに一覧があるため、自分の版の日付を確かめて、上げる作業の予定を立てます。