既存プロジェクトで利用しているPostgreSQL(v12系)が2024年11月にEOLを迎えました。
https://www.postgresql.org/support/versioning/
本記事では、開発環境をv12系からv13系を経由してv14系まで上げた状態を作ることをゴールとして、作業手順をまとめます。
作業前の開発環境
- mac OS 15.0
- Homebrew導入済み
- PostgreSQL(v12.20)
- Homebrewを使用して導入したものを想定
手順
概要
- 旧バージョンでデータをバックアップ
- Homebrewを使用して新バージョンをインストール
pg_upgrade
を実行- PATHを新バージョンに書き換えてバージョンをpsqlコマンドで確認
この作業をv12系→v13系、v13系→v14系の順に繰り返します。
v12系からv13系にバージョンアップ
1. 旧バージョンでデータをバックアップ
$ pg_dump -U postgres -d mydb_development -f v12_dump.sql
2. Homebrewでv13系をインストール
$ brew install postgresql@13
※特に指定を行わない場合、ほとんどは実行時の系で最新バージョンが入ります。詳しくはHomebrewの公式説明をご確認下さい。
3. 必要に応じて動作中のサービスを止めておく
$ brew services stop postgresql@12
$ brew services stop postgresql@13
4. v12系, v13系のそれぞれでpg_upgrade
を実行するための情報を取得
$ brew info postgresql@12
を実行して、binとデータの位置を確認する。
$ brew info postgresql@12
==> postgresql@12: stable 12.21 (bottled) [keg-only]
Object-relational database system
https://www.postgresql.org/
Deprecated because it is not supported upstream! It will be disabled on 2025-11-14.
Installed
/opt/homebrew/Cellar/postgresql@12/12.20 (3,256 files, 42.3MB)
Poured from bottle using the formulae.brew.sh API on 2024-08-29 at 13:50:50
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/p/postgresql@12.rb
License: PostgreSQL
==> Dependencies
Build: pkg-config ✔
Required: icu4c@76 ✔, krb5 ✔, openssl@3 ✔, readline ✔
==> Caveats
This formula has created a default database cluster with:
initdb –locale=C -E UTF-8 /opt/homebrew/var/postgresql@12
(略)
と表示された時、bin、dataのディレクトリ位置は以下
bin: /opt/homebrew/Cellar/postgresql@12/12.20/bin
data: /opt/homebrew/var/postgresql@12
v13系も同様に$ brew info postgresql@13
を実行してbin、dataのディレクトリ位置をメモしておく。
bin: /opt/homebrew/Cellar/postgresql@13/13.16/bin
data: /opt/homebrew/var/postgresql@13
5. pg_upgrade
を実行
$ /opt/homebrew/Cellar/postgresql@13/13.16/bin/pg_upgrade \
-b /opt/homebrew/Cellar/postgresql@12/12.20/bin \
-d /opt/homebrew/var/postgresql@12 \
-B /opt/homebrew/Cellar/postgresql@13/13.16/bin \
-D /opt/homebrew/var/postgresql@13
- pg_upgrateは移行後のv13系のコマンドを実行
- 各オプション
- b: アップグレード前のbinディレクトリ
- d: アップグレード前のdataディレクトリ
- B: アップグレード後のbinディレクトリ
- D: アップグレード後のdataディレクトリ
6. v13系のサービスをスタートする
$ brew services start postgresql@13
7. v13系にPATHを書き換える
$ vi ~/.zshrc
を実行して編集
# ~/.zshrc
# export PATH=”/usr/local/opt/postgresql@12/bin:$PATH”
# export PATH=”/opt/homebrew/opt/postgresql@12/bin:$PATH”
# ↓
export PATH=”/usr/local/opt/postgresql@13/bin:$PATH”
export PATH=”/opt/homebrew/opt/postgresql@13/bin:$PATH”
保存してから再読み込み実行$ source ~/.zshrc
8. バージョンを確認する
$ psql --version
を実行する
$ psql –version
psql (PostgreSQL) 13.16
またはDBクライアントにも表示されていることがあるので、そこでも確認可能です。
データの内容についてもv12系の内容がv13系に引き継がれているので、確認してください。
v13系からv14系にバージョンアップ
同じ作業を繰り返し、pg_upgrade
を実行します。
1. 旧バージョンでデータをバックアップ
$ pg_dump -U postgres -d mydb_development -f v13_dump.sql
2. Homebrewでv14系をインストール
$ brew install postgresql@14
3. 必要に応じて動作中のサービスを止めておく
$ brew services stop postgresql@13
$ brew services stop postgresql@14
4. v12系, v13系のそれぞれでpg_upgrade
を実行するための情報を取得
$ brew info postgresql@14
を実行して、binとデータの位置を確認する。
$ brew info postgresql@14
==> postgresql@14: stable 14.14 (bottled)
Object-relational database system
https://www.postgresql.org/
Installed
/opt/homebrew/Cellar/postgresql@14/14.13 (3,323 files, 45.6MB) *
Poured from bottle using the formulae.brew.sh API on 2024-10-02 at 16:33:01
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/p/postgresql@14.rb
License: PostgreSQL
==> Dependencies
Build: pkg-config ✔
Required: icu4c@76 ✔, krb5 ✔, lz4 ✔, openssl@3 ✔, readline ✔
==> Caveats
This formula has created a default database cluster with:
initdb –locale=C -E UTF-8 /opt/homebrew/var/postgresql@14
(略)
と表示された時、bin、dataのディレクトリ位置は以下
bin: /opt/homebrew/Cellar/postgresql@14/14.13/bin
data: /opt/homebrew/var/postgresql@14
※念のため/opt/homebrew/var/postgresql@14
のフォルダが出来ているかを確認しておいてください。
もし出来ていない場合は、下記のコマンドを実行することで作成が可能です。
$ /opt/homebrew/Cellar/postgresql@14/14.13/bin/initdb --locale=C -E UTF-8 /opt/homebrew/var/postgresql@14
5. pg_upgrade
を実行
$ /opt/homebrew/Cellar/postgresql@14/14.13/bin/pg_upgrade \
-b /opt/homebrew/Cellar/postgresql@13/13.16/bin \
-d /opt/homebrew/var/postgresql@13 \
-B /opt/homebrew/Cellar/postgresql@14/14.13/bin \
-D /opt/homebrew/var/postgresql@14
- pg_upgrateはv14系のコマンドを実行
- 各オプション
- b: アップグレード前のbinディレクトリ
- d: アップグレード前のdataディレクトリ
- B: アップグレード後のbinディレクトリ
- D: アップグレード後のdataディレクトリ
6. v14系のサービスをスタートする
$ brew services start postgresql@14
7. v14系にPATHを書き換える
$ vi ~/.zshrc
を実行して編集
# ~/.zshrc
# export PATH=”/usr/local/opt/postgresql@12/bin:$PATH”
# export PATH=”/opt/homebrew/opt/postgresql@12/bin:$PATH”
# ↓
# export PATH=”/usr/local/opt/postgresql@13/bin:$PATH”
# export PATH=”/opt/homebrew/opt/postgresql@13/bin:$PATH”
# ↓
export PATH=”/usr/local/opt/postgresql@14/bin:$PATH”
export PATH=”/opt/homebrew/opt/postgresql@14/bin:$PATH”
保存してから再読み込み実行$ source ~/.zshrc
8. バージョンを確認する
$ psql --version
を実行する
$ psql –version
psql (PostgreSQL) 14.13
データの内容についても14系に引き継がれているので、確認してください。
9. 移行が終わったら
v12系・v13系の環境が不要になったら下記コマンドで古いバージョンを削除して下さい。
brew uninstall postgresql@12
brew uninstall postgresql@13
また、ダンプしたデータも必要に応じて削除してください。
※アプリ等から移行後のDBに接続した際、パフォーマンスが遅い等の問題が発生した場合
下記のSQLを実行し、統計情報の更新を必要に応じて実施してください。
- 全統計情報の更新
ANALYZE VERBOSE
- 指定テーブルの統計情報更新
ANALYZE VERBOSE <tableName>
参考サイト
- Upgrading from PostgreSQL 14 to 15 installed with Homebrew, on an Apple Silicon Mac
- Mac: HomebrewでインストールしたPostgreSQLをアップグレードする|TechRacho by BPS株式会社
コメント