PostgreSQLのメジャーアップデート

背景

Mastodonを利用しているんですが、以前PostgreSQLのメジャーアップデートにひっかかって今回もひっかかったのでこの話だけ切り出して記事(メモ)にします。

前提

  • PostgreSQLの11->12, 12->13の話なので一桁バージョンだとまた違うかもしれない。
  • Arch LInuxを使用しているのでArchでのやり方です。他のディストリビューション/OSでのアップデートする方法は調べていないので知りません。

やる事

基本的には旧バージョンのDBを一旦退避させて、新バージョンでDBを作成したあと、新DBに旧DBのデータをマイグレーションする流れ。
一通り書いて気付いたけど全部sudo付いてるからrootでやった方が楽。

$ sudo pacman -S postgresql-old-upgrade
$ sudo systemctl stop postgresql.service
$ sudo mv /var/lib/postgres/data /var/lib/postgres/olddata
$ sudo mkdir /var/lib/postgres/data /var/lib/postgres/tmp
$ sudo chown postgres:postgres /var/lib/postgres/data /var/lib/postgres/tmp
$ sudo su - postgres
[postgres]$ initdb --locale ja_JP.UTF-8 -E UTF8 -D '/var/lib/postgres/data'
[postgres]$ cd /var/lib/postgres/tmp
[postgres]$ pg_upgrade -b /opt/pgsql-XX(旧バージョンNo.)/bin -B /usr/bin -d /var/lib/postgres/olddata -D /var/lib/postgres/data
[postgres]$ exit
$ sudo reboot(とりあえず再起動してるけどpostgresql.service再起動で済むかも。情報不足。) 
$ sudo rm -rf /var/lib/postgres/olddata /var/lib/postgres/tmp

そもそも

よく確認せず軽率にpacman -Syuしてるのがこの問題にひっかかる大元の原因なので、それを解決するには/etc/pacman.confにあるIgnorePkgコメントアウトを外し

IgnorePkg  = postgresql postgresql-libs

と変更して、普通のアップデートでアップグレードされないようにする事が必要。