Ubuntuサーバーで既存のPostgreSQL 14バージョンをPostgreSQL 16にアップグレードし、データ損失なしに移行した実際のプロセスを整理したガイドです。
全データバックアップ、新バージョンのインストール、データ復元、古いバージョンの削除までの全プロセスを段階的に実行できるように構成しました。

PostgreSQL upgrade from 14 to 16 symbol

1. 現在のPostgreSQLバージョンおよびクラスター状態の確認

psql --version
pg_lsclusters

クラスター状態で14/mainがアクティブになっているか確認します。


2. 全データバックアップ

PostgreSQLはpg_dumpallコマンドを使用して、すべてのデータベース、ユーザー、権限情報を含んだバックアップを行うことができます。

sudo -u postgres pg_dumpall > ~/pg_backup_all.sql

バックアップ検証例(任意)

head ~/pg_backup_all.sql
tail ~/pg_backup_all.sql

ファイルの存在確認およびサイズ確認

ls -lh ~/pg_backup_all.sql

3. PostgreSQL 16のインストール

3-1. 公式リポジトリの登録

sudo apt update
sudo apt install wget ca-certificates -y
wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/pgdg.gpg
echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" |   sudo tee /etc/apt/sources.list.d/pgdg.list

3-2. PostgreSQL 16のインストール

sudo apt update
sudo apt install postgresql-16 -y

インストールが完了したら再度クラスター状態を確認します。

pg_lsclusters

4. クラスターの切り替え

既存の14バージョンを停止し、16バージョンを起動します。

sudo systemctl stop postgresql@14-main
sudo systemctl start postgresql@16-main

5. データ復元(PostgreSQL 16へ)

復元前に、新しくインストールされた16バージョンに接続できるか確認します。
(ポート番号はpg_lsclustersで確認)

sudo -u postgres psql -p 5433

接続が成功したら、以下のコマンドでバックアップしたデータを復元します:

sudo -u postgres psql < ~/pg_backup_all.sql

less ~/pg_backup_all.sql | grep ERRORを使ってエラーの発生を確認できます。


6. PostgreSQL 14の削除(任意)

アップグレードとデータ復元が完了し、問題がなければPostgreSQL 14を削除できます:

sudo pg_dropcluster 14 main --stop
sudo apt remove postgresql-14 -y

まとめ

今回のプロセスは、UbuntuサーバーでPostgreSQL 14から16へのアップグレード及び移行が必要な方にとって有用です。
データバックアップ → 新規インストール → 復元 → 古いバージョンの削除の順に、安全にバージョンを切り替えてください。

サーバーのユーザー名、ポート番号などは、あなたの環境に合わせて調整してください。