はじめに
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の新機能を活用して、さらにパフォーマンスを向上させましょう!
コメント