trwnh.com/unified.test.hugo/content/kb/postgres-upgrade.md

2.4 KiB

upgrading postgresql on arch (in case you fucked up)

stop postgresql
stop akkoma   # make sure nothing is trying to hit the database

pg_upgrade will fail if you initdb with different params

so i'd made a file-level backup at least

sudo mv /var/lib/postgres/data /var/lib/postgres/olddata

i tried to

sudo mkdir /var/lib/postgres/data /var/lib/postgres/tmp
sudo chown postgres:postgres /var/lib/postgres/data /var/lib/postgres/tmp

sudo -iu postgres
cd /var/lib/postgres/tmp
initdb -D /var/lib/postgres/data --locale=en_US.UTF-8 --encoding=UTF8 --data-checksums

this caused pg_upgrade to fail because the old data didn't have --data-checksums enabled

pg_dumpall will fail with extensions like rum

ok so that didn't work, let's try the manual dump and reload. exit out of the postgres session and back to your user

yay -S postgresql-old-upgrade
sudo rm -r /var/lib/postgres/data
sudo mkdir /var/lib/postgres/data
sudo chown -R postgres:postgres /var/lib/postgres/data

sudo -iu postgres
initdb -D /var/lib/postgres/data
/opt/pgsql-14/bin/pg_ctl -D /var/lib/postgres/olddata/ start

the old version should be running now

pg_dumpall -h /tmp -f /tmp/old_backup.sql

aaaaand this failed because of something to do with pg_rum

downgrading to get a good dump

ok let's kill the old postgres

sudo killall postgres

copy the old data over and set permissions

sudo rm -r /var/lib/postgres/data
sudo cp -r /var/lib/postgres/olddata /var/lib/postgres/data
sudo chown -R postgres:postgres /var/lib/postgres/data

downgrade to the last version of postgres

yay -S downgrade
sudo downgrade postgresql
start postgresql

dump

pg_dumpall > /tmp/dumpall.sql

now we can upgrade again?

stop postgresql
yay -S postgresql
yay -S pg_rum     # do a clean build?

now we try to restore data

sudo rm -r /var/lib/postgres/data
sudo mkdir /var/lib/postgres/data
sudo chown -R postgres:postgres /var/lib/postgres/data

sudo -Hu postgres initdb -D /var/lib/postgres/data --locale=en_US.UTF-8 --encoding=UTF8 --data-checksums

start postgresql

sudo -Hu postgres psql -f /tmp/dumpall.sql template1

this worked for me

etc

while you're here you might as well update and migrate akkoma if you're still running that?

sudo -Hu akkoma MIX_ENV=prod mix deps.get
sudo -Hu akkoma MIX_ENV=prod mix ecto.migrate
start akkoma