Meine selbst gehostete FreshRSS-Instanz besteht aus zwei Docker-Containern in einem Compose-Stack: Der Webserver selbst und eine PostgreSQL-Datenbank. Da die Installation schon ein wenig älter ist, habe ich PG noch in Version 15 vorliegen und wollte das jetzt gerne ein wenig frischer haben.
Um das Upgrade ein wenig leichter zu gestalten, habe ich https://github.com/pgautoupgrade/docker-pgautoupgrade verwendet.
Erst das Offensichtliche: vorher immer ein Backup von Allem machen!
Los geht's
Zuerst wird der ganze Stack beendet, anschließend kann pqautoupgrade ausgeführt werden:
$ docker run --name pgauto -it -v "$PWD/db":/var/lib/postgresql/data -e POSTGRES_DB=freshrss -e POSTGRES_USER=freshrss -e POSTGRES_PASSWORD=PASSWORD -e PGAUTO_ONESHOT=yes pgautoupgrade/pgautoupgrade:17-debian
Nun kann der Stack angepasst werden und PostgreSQL in Version 17 verwendet werden. Schaut man in die Logs vom Datenbank-Container, werden einem folgende Meldungen auffallen:
WARNING: database "freshrss" has a collation version mismatch
DETAIL: The database was created using collation version 2.36, but the operating system provides version 2.41.
HINT: Rebuild all objects in this database that use the default collation and run ALTER DATABASE freshrss REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.
Diese Meldungen gibt es auch für die Datenbanken freshrss-db, postgres und template1. Also muss eine Verbindung zur Datenbank im Container hergestellt werden, z.B. direkt in der Shell des Containers:
# psql -d freshrss -U freshrss
Hier können dann die gewünschten Anpassungen vorgenommen werden:
ALTER DATABASE "freshrss-db" REFRESH COLLATION VERSION;
ALTER DATABASE "freshrss" REFRESH COLLATION VERSION;
ALTER DATABASE "postgres" REFRESH COLLATION VERSION;
ALTER DATABASE "template1" REFRESH COLLATION VERSION;
REINDEX DATABASE;
Fertig 😃