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

114 lines
2.4 KiB
Markdown
Raw Normal View History

2024-10-05 06:27:07 +00:00
# upgrading postgresql on arch (in case you fucked up)
```sh
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
```sh
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
```sh
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
```sh
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
```sh
sudo killall postgres
```
copy the old data over and set permissions
```sh
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
```sh
yay -S downgrade
sudo downgrade postgresql
start postgresql
```
dump
```sh
pg_dumpall > /tmp/dumpall.sql
```
now we can upgrade again?
```sh
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?
```sh
sudo -Hu akkoma MIX_ENV=prod mix deps.get
sudo -Hu akkoma MIX_ENV=prod mix ecto.migrate
start akkoma
```