Upgrade der Docker Postgres-Datenbank von Version 15 auf 16: Ein Erfahrungsbericht

Einleitung

In meinem Homelab betreibe ich eine Paperless-NGX Instanz, die eine PostgreSQL-Datenbank zur Datenverwaltung verwendet. Lange Zeit habe ich es vermieden, meine Postgres-Datenbanken auf die nächste Major-Version zu aktualisieren. Der Hauptgrund dafür war die Notwendigkeit, Migrationen über Dumps durchzuführen, da PostgreSQL keine interne Migration von Major-Versionen unterstützt.

Mit der Veröffentlichung eines verständlicheren Guides von Paperless-NGX habe ich mich nun endlich getraut, das Update durchzuführen.

Vorbereitungen und Backup

Bevor ich mit dem Update begann, habe ich ein vollständiges Backup meiner Proxmox LXC Instanz erstellt.

Diese Sicherheitsmaßnahme ist essenziell, um bei eventuellen Problemen während des Updates jederzeit einen Wiederherstellungspunkt zu haben.

Schritt-für-Schritt-Anleitung zum Update

Folgend ist die detaillierte Anleitung, die ich befolgt habe.

Bitte beachtet, dass diese Anleitung auf meine spezifische Konfiguration abgestimmt ist und eventuell Anpassungen für andere Setups erforderlich sind.

1. Alte docker-compose.yml Konfiguration

services:
  db:
    image: docker.io/library/postgres:15
    volumes:
      - db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: database
      POSTGRES_USER: username
      POSTGRES_PASSWORD: password
volumes:
  db_data:

2. Herunterfahren der gesamten Docker Compose Instanz

docker compose down

Damit nicht mehr auf die Datenbank zugegriffen wird und es zum Datenverlust kommen könnte.

3. Starten des Postgres Containers (Version 15)

docker compose up -d db

Hier wird explizit nur der PostgreSQL Container db detached hochgefahren.

4. Datenbank-Dump erstellen

Der Datenbank-Dump wird jetzt über pg_dumpall erzeugt. Dies schreibt den gesamten Inhalt der Dankenbank in ein File und kann je nach Datenbankgröße einige Zeit andauern.

docker compose exec db pg_dumpall -U username > dump.sql

An dieser Stelle ist es sinnvoll die dump.sql Datei zu überprüfen, um sicherzustellen, dass der Dump korrekt erstellt wurde.

Die dump.sql Datei wird hier im Ordner, in dem der Befehl ausgeführt wurde, erzeugt.

5. Herunterfahren des Postgres Containers

docker compose down db

6. Löschen des Datenbankvolumes

Um sicherzustellen, dass keine alten Datenreste verbleiben, wird das Datenbankvolume gelöscht:

docker volume rm db_data

7. Aktualisieren der docker-compose.yml für Postgres 16

services:
  db:
    image: docker.io/library/postgres:16
    volumes:
      - db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: database
      POSTGRES_USER: username
      POSTGRES_PASSWORD: password
volumes:
  db_data:

8. Neues Postgres Image herunterladen

docker compose pull

9. Starten des neuen Postgres Containers (Version 16)

docker compose up -d db

10. Import des Datenbank-Dumps

Mit folgendem Befehl wird der Dump in die neue Postgres-Instanz eingespielt:

cat dump.sql | docker exec -i db psql -U username

11. Erneutes Herunterfahren des Postgres Containers

docker compose down

12. Starten der gesamten Docker Compose Instanz

docker compose up

Fazit

Der Prozess des Updates von PostgreSQL 15 auf 16 war dank der klaren Anleitung relativ unkompliziert. Es ist jedoch wichtig, vor solch einem Upgrade stets vollständige Backups zu erstellen und sich ausreichend Zeit zu nehmen, um den Vorgang sorgfältig durchzuführen.

Mit der neuen Postgres-Version kann nun die Paperless-NGX Instanz von den neuesten Features und Verbesserungen profitieren.

Alle weiteren Postgres Instanzen in meinem Homelab werden folgen!


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert