【PostgreSQL】開発環境(mac)のPostgreSQL v12系をv14系までバージョンアップ


既存プロジェクトで利用しているPostgreSQL(v12系)が2024年11月にEOLを迎えました。
https://www.postgresql.org/support/versioning/

本記事では、開発環境をv12系からv13系を経由してv14系まで上げた状態を作ることをゴールとして、作業手順をまとめます。
目次

作業前の開発環境

  • mac OS 15.0
  • PostgreSQL(v12.20)
    • Homebrewを使用して導入したものを想定

手順

概要

  1. 旧バージョンでデータをバックアップ
  2. Homebrewを使用して新バージョンをインストール
  3. pg_upgradeを実行⁠⁠​
  4. 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>

参考サイト

役に立ったらシェアしていただけると嬉しいです
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次