手順メモ

  1. データディレクトリをバックアップする(rename + copyが良いと思う)
  2. サーバーに現行postgresとアップデート先のpostgres両方を入れる
  3. 新しいバージョンのinitdbで新しくデータディレクトリを初期化する
  4. 上記両方のpsqlサーバーが停止していることを確認する
  5. pg_upgradeコマンドで新旧データディレクトリ(D, dオプション)と新旧postgresのbinディレクトリ(B,bオプション)を指定してデータ移行
  6. 新しいpostgresのサーバーを立ち上げる

最低限はこれでできるっぽい。

その他メモ

  • 今更だがデータベースのLocaleは結構重要なようで、新旧DBのLocaleが不一致だった場合はpg_upgradeは失敗する
  • コンテナ上で作業する場合は、作業用コンテナをdocker runでベースのイメージから立ち上げて作業していくのが良さそう(-vでディレクトリマウントするの忘れずに)

ロケール生成

rockylinuxをコンテナで動かした場合、ロケールが入ってないのでコケることが多い。そういうときは、必要なロケールデータを以下のようなコマンドでインストールする。

$ dnf install glibc-locale-source glibc-langpack-en langpacks-en # en_USを生成したい場合

それから、localedefで生成する。

$ localedef -f UTF-8 -i en_US en_US.UTF-8

これでロケールを使えるようになる。