PostgreSQL アップグレード手順(15から16 Windows)

はじめに

PostgreSQLの新バージョンがリリースされると、多くの機能強化やバグ修正が含まれています。そのため、既存のデータベースを最新のバージョンにアップグレードすることが推奨されます。この記事では、PostgreSQL 15からPostgreSQL 16にpg_upgradeを使用してバージョンアップする方法について詳しく説明します。

pg_upgradeとは

pg_upgradeは、PostgreSQLの主要バージョン間でデータベースクラスタを迅速かつ安全にアップグレードするためのツールです。pg_upgradeを使用することで、既存のデータファイルを再利用し、新しいバージョンのバイナリにアップグレードすることができます。

pg_upgradeの利点

  • 高速: 大量のデータを持つデータベースでも、従来のダンプ・リストアに比べてはるかに高速にアップグレードが可能。
  • 信頼性: アップグレード中にデータの整合性が保証されます。
  • 簡単な手順: 複雑な操作を必要とせず、コマンドラインから簡単に実行できます。

アップグレードの準備

アップグレードを始める前に、いくつかの準備が必要です。

PostgreSQL 16をインストール

新バージョンのPostgreSQL 16(postgresql-16.4-1-windows-x64.exe)をインストール、その際にポートを一時的に「5433」にしておきます。アップデート完了後にポートを標準の「5432」に戻します。

拡張機能をインストール

旧バージョンのPostgreSQL 15はpgroongaなどの拡張機能をインストールされていた場合、新バージョンのPostgreSQL 16も同様の拡張機能をインストールして置く必要があります。

インストールしてない時アップグレードを行うと、以下のようなエラーメッセージが出ます。

このクラスタでは、移行先の環境にはないロード可能ライブラリを参照しています。
これらのライブラリを移行先の環境に追加するか、もしくは移行元の環境から
それらを使っている関数を削除してください。 問題のライブラリの一覧は、
以下のファイルに入っています:
C:/Program Files/PostgreSQL/16/data/pg_upgrade_output.d/20240820T161442.262/loadable_libraries.txt
失敗しました、終了しています

サービスの停止

PostgreSQL 15とPostgreSQL 16両サーバを停止します。

net stop postgresql-x64-15
net stop postgresql-x64-16

認証の調整

g_upgradeは古いサーバと新しいサーバに複数回接続します。このため、pg_hba.conf内でロカール接続をtrust認証に設定します。

host    all    all    127.0.0.1/32      trust
host    all    all    ::1/128           trust

環境変数PostgreSQLのパスを15から16に変更

最新バージョンのpg_upgrade.exeを使用するために、環境変数PostgreSQLのパスを15から16に変更します。

システムの詳細設定→環境変数→Path

C:\Program Files\PostgreSQL\15\bin
↓
C:\Program Files\PostgreSQL\16\bin

pg_upgradeの実行手順

pg_upgradeの実行

pg_upgradeを実行して、PostgreSQL 15からPostgreSQL 16にデータを移行します。

pg_upgrade -U postgres -p 5432 -P 5433 -d "C:/Program Files/PostgreSQL/15/data"  -D "C:/Program Files/PostgreSQL/16/data"  -b "C:/Program Files/PostgreSQL/15/bin"  -B "C:/Program Files/PostgreSQL/16/bin"

ここで使用しているオプションの意味は次の通りです:

  • -U: 使用するスーパーユーザー。
  • -p:旧バージョンのポート番号
  • -P:新バージョンのポート番号
  • -d: 旧バージョンのデータディレクトリ。
  • -D: 新バージョンのデータディレクトリ。
  • -b: 旧バージョンのPostgreSQLのバイナリディレクトリ。
  • -B: 新バージョンのPostgreSQLのバイナリディレクトリ。

アップグレード成功したら、以下ようなメッセージが表示されます。

このクラスタにはALTER EXTENSIONコマンドによるアップデートが必要な機能拡張が
あります。以下のファイルをpsqlを使ってデータベースのスーパーユーザーとして実行することで
これらの機能拡張をアップデートできます。
update_extensions.sql

アップグレードが完了しました

オプティマイザーの統計は、pg_upgrade では転送されません。そのため
新サーバーを起動した後、以下を行うことを検討してください。
C:/Program Files/PostgreSQL/16/bin/vacuumdb -U postgres –all –analyze-in-stages
このスクリプトを実行すると、旧クラスタのデータファイルが削除されます:
delete_old_cluster.bat

pg_hba.confとpostgresql.conf設定の変更

アップグレードではpg_hba.confとpostgresql.confの設定情報は引き継がれないため、新バージョンは旧バージョンの設定を参照して、変更しておく必要があります。

新しいPostgreSQLの起動

net start postgresql-x64-16

アナライズの実行

vacuumdb -U postgres --all --analyze-in-stages

バージョンの確認

C:\Windows\system32>psql -V
psql (PostgreSQL) 16.4

データの確認

正しくデータが移行されていることを確認します。

旧バージョンPostgreSQL削除

不要であれば、旧バージョンのPostgreSQL 15のデータベースクラスタ(dataフォルダ)を削除します。
pg_upgradeツールが生成した「delete_old_cluster.bat」ファイルを実行すると簡単にできます。

delete_old_cluster.bat

旧バージョンPostgreSQL15をアンインストールする。

まとめ

pg_upgradeを使用することで、PostgreSQL 15から16へのアップグレードが簡単かつ迅速に実行できることがわかりました。事前準備をしっかり行い、ステップを正確に進めることで、安全にアップグレードを完了できます。PostgreSQL 16の新機能を活用して、さらにパフォーマンスを向上させましょう!

コメント

タイトルとURLをコピーしました