注: 以下はChatGPT o1によって生成された文章です。 とりあえずうまくいきましたが、必ずバックアップを作成してから実行すること!
1. PostgreSQL 17 のインストール
PostgreSQL 17 のリポジトリとパッケージが公開されている場合、以下のように実行します:
sudo apt-get install postgresql-17
これでシステム上に PostgreSQL 17 のバイナリや、cluster のスクリプトなどがインストールされます。
2. 既存の PostgreSQL 15 の確認
PostgreSQL のデータベースクラスタ管理は postgresql-common
が提供するコマンド pg_lsclusters
で確認できます。
pg_lsclusters
通常、インストール直後は以下のようなクラスタが存在しているはずです:
- 15 メインクラスタ:
15 main ...
- 17 メインクラスタ:
17 main ...
※ PostgreSQL 17 インストール時に、自動的に空の 17/main
クラスタが作成される場合があります。
3. 新規クラスタを削除 (空の17クラスタを作り直す場合)
PostgreSQL 17 インストール時に自動生成された「空」の 17/main
クラスタが不要であれば、pg_upgradecluster
実行前に削除しておきます。
sudo pg_dropcluster 17 main --stop
クラスタを削除すると、同名クラスタでの pg_upgradecluster
が可能になります。
4. データのアップグレード(pg_upgradecluster を使用)
Ubuntu/Debian 系で提供されている pg_upgradecluster
コマンドを使うと、自動的に
- 旧バージョンのデータディレクトリ → 新バージョンのデータディレクトリへのマイグレーション
- 設定ファイルのコピー
- ポート設定やサービス設定の反映
などを行ってくれます。以下のコマンドを実行してください。
sudo pg_upgradecluster 15 main
このコマンドは下記を自動的に実行します。
- 既存の 15/main クラスタを読み込み
- 新しい 17/main クラスタ用のデータディレクトリを初期化
- PostgreSQL 15 と 17 のバイナリを使い分けながら
pg_upgrade
を実行 - 15/main の設定ファイルなどを 17/main にコピー
- 必要に応じて、元の 15/main を停止し、17/main を起動
処理が完了したらエラーがないかを確認してください。エラーが無ければ、アップグレードは成功です。
5. 動作確認
アップグレードが完了したら、 PostgreSQL 17 のクラスタが起動しているかを確認します。
pg_lsclusters
17 main ... online
のようになっていれば OK です。
次にデータベースに接続できるかを確認します。
sudo -u postgres psql
正しくログインでき、テーブルやスキーマなどが期待通りに移行されているか確認してください。
6. 古いバージョン(15) のクラスタ削除(不要であれば)
アップグレード後に問題が無ければ、古いデータディレクトリは削除しても構いません。pg_upgradecluster
は既存のクラスタを削除しませんが、不要であれば下記コマンドで削除が可能です。
sudo pg_dropcluster 15 main --stop
さらにパッケージとしても PostgreSQL 15 が不要であれば削除可能ですが、他に依存がある場合は削除前にご注意ください。
sudo apt-get remove postgresql-15
7. トラブルシューティング
-
ポートの競合: 15 と 17 が同時に起動できない場合、設定ファイルに定義されたポート番号が重複している可能性があります。
/etc/postgresql/<バージョン>/main/postgresql.conf
を確認してみてください。 - 拡張機能/モジュール: 特定の拡張機能(例: PostGIS 等)を使用している場合、PostgreSQL 17 向けに該当拡張が対応しているか確認が必要です。
-
十分なストレージ容量:
pg_upgrade
は一時ファイルやリンクを作成するため、アップグレード前に空き領域が十分あるか確認してください。
まとめ
- PostgreSQL 17 をインストール
- 自動生成された空のクラスタを必要に応じて削除
-
pg_upgradecluster 15 main
を実行 - 動作確認
- 問題なければ古いクラスタや不要パッケージを削除
上記のステップで、PostgreSQL 15 から PostgreSQL 17 へのアップグレードをデータを保持したままスムーズに行うことができます。必ず 事前にバックアップ を取った上で実施することを強くおすすめします。