NetBSDで動かしているPostgreSQLサーバをアップグレードする

2022年07月03日 初稿

PostgreSQL 12.11から14.4へアップグレードしたときの手順を紹介します。


pg_dumpを用いないPostgreSQLのアップグレード

2022年07月03日現在、pkgsrcで提供されているPostgreSQLパッケージはバージョンごとにバイナリのディレクトリやデータのディレクトリが分離されていないため単純にpg_upgradeを動かして既存の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で削除された依存パッケージをインストールし直してください。