PostgreSQL on OpenBSD: 12 から 13 へのアップグレード - pg_dumpall 使用

nabbisen - May 6 '23 - - Dev Community

はじめに

OpenBSD6.8 から 6.9 へのアップグレードに際しては、PostgreSQL サーバーも (12.6 から 13.2) へアップグレードする必要があります。OpenBSD の アップグレード・ガイド (英語) でそのように案内されています
本記事では、以下の postgresql-server パッケージ公式の readme に沿って、実施した内容を記載します:

$ nvim -R /usr/local/share/doc/pkg-readmes/postgresql-server
Enter fullscreen mode Exit fullscreen mode

本記事とは別の方法もありますpg_upgrade を使う方法です。追加のパッケージのインストールが必要ですが、マイグレーション速度の向上が期待できます。

チュートリアル

サーバーが動いていることを確認しましょう。

$ doas rcctl check postgresql
postgresql(ok)
Enter fullscreen mode Exit fullscreen mode

pg_dumpall を実行します。

$ doas su _postgresql -c "cd /var/postgresql \
    && pg_dumpall -U postgres > /var/postgresql/full.sqldump.bkYYMMDD"
$ # pg superuser's password is required times of the number of tables
Enter fullscreen mode Exit fullscreen mode

なおここでの "YYMMDD" は実際のバックアップ取得日にしてください。一例ですが Fish シェル でしたら date +"%y%m%d" でシステム日をセットできます。

サーバーを停止します。

$ doas rcctl stop postgresql
postgresql(ok)
$ # check the server is stopped
$ doas rcctl check postgresql
postgresql(failed)
Enter fullscreen mode Exit fullscreen mode

サーバーのパッケージをアップグレードします。

$ doas pkg_add -ui postgresql-server
$ # updated
Enter fullscreen mode Exit fullscreen mode

/var/postgresql/data をつくりかえます。

$ doas mv /var/postgresql/data /var/postgresql/data-12
$ doas su _postgresql -c "mkdir /var/postgresql/data"
Enter fullscreen mode Exit fullscreen mode

initdb を実行します。

$ # `--locale` option here can be omitted
$ doas su _postgresql -c "cd /var/postgresql && \
    initdb -D /var/postgresql/data -U postgres -A scram-sha-256 -E UTF8 -W \
        --locale=xx_XX.UTF-8"
$ # pg superuser's password is required
Enter fullscreen mode Exit fullscreen mode

必ずしもというわけではありませんが、必要に応じて、サーバーの設定を行います。

$ # in case of using tls/ssl connection
$ # - set `listen_addresses` and `ssl` option
$ doas nvim "/var/postgresql/data/postgresql.conf"
$ # - add `hostssl` authentication
$ doas nvim "/var/postgresql/data/pg_hba.conf"
$ # - create certificate if not exists
$ doas su _postgresql -c \
    "cp /var/postgresql/data-12/server.{crt,key} /var/postgresql/data/"
Enter fullscreen mode Exit fullscreen mode

上記は こちらの記事 に基づいています。


新しくなったサーバーを起動します。

$ doas rcctl start postgresql
postgresql(ok)
$ # check the server is started and running
$ doas rcctl check postgresql
postgresql(ok)
Enter fullscreen mode Exit fullscreen mode

データベースとテーブルやレコード等のオブジェクトをリストアします。

$ doas su _postgresql -c "cd /var/postgresql && \
    psql -U postgres < /var/postgresql/full.sqldump.bkYYMMDD"
$ # restored
Enter fullscreen mode Exit fullscreen mode

完了です 🙂

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .