Upgrade von PostgreSQL
PostgreSQL wird kontinuierlich weiterentwickelt und verbessert. Neue Versionen enthalten Fehlerbehebungen, Leistungsverbesserungen und neue Funktionen. Daher ist es empfehlenswert, PostgreSQL regelmäßig zu aktualisieren, um von diesen Verbesserungen zu profitieren.
Bei PostgreSQL wird zwischen Minor-Versionen und Major-Versionen unterschieden. Minor-Versionen enthalten in der Regel nur kleinere Verbesserungen und Fehlerbehebungen, während Major-Versionen umfangreiche Änderungen und neue Funktionen mit sich bringen.
PostgreSQL erscheint jährlich in einer neuen Major-Version. Ein Upgrade auf eine neue Major-Version erfordert ein Backup/Restore, da PostgreSQL keine automatische Migration zwischen Major-Versionen durchführt.
Minor-Versionen vs. Major-Versionen
Abschnitt betitelt „Minor-Versionen vs. Major-Versionen“-
Minor-Versionen (z.B. 17.0 → 17.1): Können (und sollten) problemlos eingespielt werden, ohne dass ein Backup/Restore erforderlich ist. Darum kümmert sich idealerweise Watchtower automatisch.
-
Major-Versionen (z.B. 17 → 18): Erfordern ein manuelles Upgrade mit Backup/Restore.
Schritt-für-Schritt-Anleitung für Major-Upgrade
Abschnitt betitelt „Schritt-für-Schritt-Anleitung für Major-Upgrade“Die folgende Anleitung beschreibt das Upgrade auf eine neue Major-Version, z.B. von PostgreSQL 17 auf PostgreSQL 18. Auch ältere Versionen (z.B. 13, 14, 15, 16) können auf diese Weise auf den aktuellen Stand gebracht werden.
1. In SOLECTRUS-Ordner wechseln
Abschnitt betitelt „1. In SOLECTRUS-Ordner wechseln“Wechsle in den SOLECTRUS-Ordner, der die compose.yaml und .env Dateien enthält:
cd /pfad/zu/solectrus2. Container-Status prüfen
Abschnitt betitelt „2. Container-Status prüfen“Stelle sicher, dass die Docker-Container laufen:
docker compose psIn der ausgegeben Liste muss ein Eintrag für PostgreSQL vorhanden sein, z.B.:
...solectrus-postgresql-1 postgres:17-alpine "docker-entrypoint.s…" postgresql 2 days ago Up 2 days (healthy). 5432/tcp...Wichtig ist, dass der Status Up ist, hier zu sehen in Up 2 days (healthy).
3. Backup erstellen
Abschnitt betitelt „3. Backup erstellen“Erstelle ein Backup der bestehenden Datenbank:
docker compose exec postgresql pg_dumpall -U postgres | gzip > postgresql_backup.sql.gz4. Container stoppen
Abschnitt betitelt „4. Container stoppen“Stoppe nun den PostgreSQL-Container, während die anderen SOLECTRUS-Dienste weiterlaufen sollen:
docker compose stop postgresql5. Datenverzeichnis umbenennen
Abschnitt betitelt „5. Datenverzeichnis umbenennen“Benenne das bestehende PostgreSQL-Datenverzeichnis um (falls etwas schief gehen sollte) und erstelle ein neues, leeres Verzeichnis:
mv postgresql postgresql.bakmkdir postgresql6. compose.yaml aktualisieren
Abschnitt betitelt „6. compose.yaml aktualisieren“Aktualisiere die PostgreSQL-Version in deiner compose.yaml auf die gewünschte Version (aktuell ist 18). Wichtig: Bei Upgrade auf Version 18 muss auch das Volume-Mapping angepasst werden:
services: # ... postgresql: image: postgres:18-alpine # ... volumes: - ${DB_VOLUME_PATH}:/var/lib/postgresql # Unterordner 'data' entfernt! # ... Rest der Konfiguration bleibt unverändert7. Neue PostgreSQL-Version starten
Abschnitt betitelt „7. Neue PostgreSQL-Version starten“docker compose up -d postgresqlEs wird das neue Docker-Image heruntergeladen (sofern noch nicht vorhanden) und ein Container gestartet. PostgreSQL wird eine neue, leere Datenbank erstellen.
8. Backup wiederherstellen
Abschnitt betitelt „8. Backup wiederherstellen“Warte, bis PostgreSQL vollständig gestartet ist:
docker compose logs -f postgresqlEs muss darin (nach kurzer Zeit) folgende Meldung erscheinen:
postgresql-1 | starting PostgreSQL 18.0 on aarch64-unknown-linux-musl, compiled by gcc (Alpine 14.2.0) 14.2.0, 64-bit...postgresql-1 | database system is ready to accept connectionsWichtig ist, dass wirklich die gewünschte Versionsnummer erscheint (hier: 18.0) und dass die letzte Zeile database system is ready to accept connections lautet. Beende die Protokoll-Ausgabe mit Strg + C.
Stelle nun dann das Backup wieder her:
zcat postgresql_backup.sql.gz | docker compose exec -T postgresql psql -U postgresDie Ausgabe ist etwas kryptisch und enthält diverse SQL-Befehle wie SET, CREATE DATABASE, ALTER TABLE usw. Es darf hier keine Fehlermeldung erscheinen. Einzige Ausnahme ist die Zeile ERROR: role "postgres" already exists, diese Meldung kann ignoriert werden.
9. Prüfen
Abschnitt betitelt „9. Prüfen“Prüfe nun, ob alles funktioniert, indem du SOLECTRUS im Browser aufrufst. Es muss alles wie gewohnt funktionieren und insbesondere müssen alle Einstellungen (z.B. Preise) noch vorhanden sein. Bitte prüfe das sorgfältig!
10. Aufräumen (optional)
Abschnitt betitelt „10. Aufräumen (optional)“Nach erfolgreichem Upgrade (alles geprüft?) kannst du die Backup-Dateien aufräumen:
# Altes Datenverzeichnis entfernen (ggfs. sudo erforderlich)rm -rf postgresql.bak
# Backup-Datei löschenrm postgresql_backup.sql.gzFertig! Das Upgrade ist abgeschlossen und du hast jetzt ein Jahr lang wieder Ruhe, Minor-Versionen werden ja automatisch eingespielt (sofern Watchtower läuft).