TL;DR: Wir exportieren die komplette PostgreSQL-Datenbank und importieren den Dump in ein neue Instanz der höheren Version.
Export der bestehenden Datenbank
Da die Datenbank in einer Docker-Instanz läuft kann nicht direkt über PostgreSQL-Kommandozeilentools auf die DB zugegriffen werden. D.h. wir müssen mittel Docker-Befehlen in die Instanz einsteigen und dort die PostgreSQL-Befehle ausführen:
sudo docker exec -it <Pod name> pg_dump -U <DB user> > postgres_dump.sql
Die Ausgabedatei postgres_dump.sql wird dabei im aktuellen Verzeichnis auf der Host-Maschine abgelegt.
sudo ist je nach Benutzerrechten eventuell nicht erforderlich, der Einfachheit halber nutzen wir es hier allerdings.
Einrichten der neuen PostgreSQL-Instanz
Jetzt müssen folgende Schritte ausgeführt werden:
- Abdrehen der "alten" Docker-Instanz
- Umbenennen der "alten" Docker-Instanz, damit die neue als Drop-In-Replacement benutzt werden kann.
- Anlegen und Starten der neuen PostgreSQL-Instanz. Passwörter und Benutzer müssen von der alten übernommen werden. Am einfachsten ist einfach die Konfiguration der alten zu exportieren und neu zu importieren. WICHTIG! Für die neue Instanz muss ein neues Datenverzeichnis angelegt werden, da sonst auf die alten Daten zugegriffen wird und das eben gerade nicht geht (deshalb der ganze Artikel).
Import in die neue PostgreSQL-Instanz
Wenn die neue Instanz läuft wird der zuvor erstellte DB-Dump einfach wieder importiert:
`
sudo docker exec -i <Pod name> psql -U <DB user> < postgres_dump.sql