NetBSDで動かしているPostgreSQLサーバをアップグレードする
2022年07月03日 初稿
PostgreSQL 12.11から14.4へアップグレードしたときの手順を紹介します。
pg_dumpを用いないPostgreSQLのアップグレード
2022年07月03日現在、pkgsrcで提供されているPostgreSQLパッケージはバージョンごとにバイナリのディレクトリやデータのディレクトリが分離されていないため単純にpg_upgrade
を動かして既存のPostgreSQLサーバのアップグレードはできません。
そこで、まずは移行元のバージョンのデータベースをダンプします。その後、移行先のバージョンのデータベースを新しく作り直し、ダンプしたデータを取り込ませることでアップグレードします。
アップグレードを始める前に
アップグレードを始める前に以下を確認してください。
- PostgreSQLを利用しているサービスがアップグレード後のバージョンをサポートしている。
- PostgreSQLを利用しているサービスが停止している。
特に前もってデータベースに対し読み書きをおこなうサービスを停止しておかないと、データをダンプしてバックアップを作成したときとその後の作業の間でなにかしらのデータがサービスによって書き込まれてしまった場合、サービスの状態に齟齬が発生するかもしれません。
データのダンプ
pg_dump
コマンドを使い、作成しているデータベースのデータをダンプします。
pg_dump -U ユーザ名 データベース名 > pgsql-dump
その後PostgreSQLサーバのサービスを停止し、データディレクトリの名前を変更します。データディレクトリの名前を変更するのは、このあと新しいほうのPostgreSQLパッケージであらためてデータベースの初期化をおこなうためです。
service pgsql stop
mv /usr/pkg/pgsql /usr/pkg/pgsql.old
古いPostgreSQLパッケージを削除します。ここではPostgreSQLパッケージに依存しているパッケージもすべて削除するようにしています。
pkg_delete -r postgresql12-server postgresql12-client
新しいPostgreSQLサーバのインストール
pkgsrcから新しいPostgreSQLサーバをインストールします。
cd /usr/pkgsrc/databases/postgresql14-server
make install clean clean-depends
正常にパッケージのビルドとインストールが完了したら、新しいバージョンのPostgreSQLでデータベースを初期化しサービスを起動します。
/etc/rc.d/pgsql initdb -E UTF8
service pgsql start
ダンプしたデータのインポート
移行前に使っていたデータベースおよびユーザを作り直し、先ほどダンプしたデータをインポートします。
psql -U ユーザ名 データベース < pgsql-dump
これでpg_upgrade
を使わないアップグレードは完了です。pkg_delete
で削除された依存パッケージをインストールし直してください。