Dieses Tutorial zeigt wie eine PostgreSQL-Datenbank auf eine neue Hauptversion migriert wird, wie man die aktive Version auf Port 5432 verlegt und alte Versionen im PostgreSQL-Cluster löscht.
PostgreSQL-Cluster
Wird z.B. auf Ubuntu ein apt -upgrade
ausgeführt so werden auch neue Hauptversionen von PostgreSQL installiert. Die Datenbank bleibt allerdings auf der bisherigen Hauptversion und für die neue Hauptversion wird ein eigener PostgreSQL-Server in einem Cluster angelegt. War bisher kein Cluster vorhanden, so wird einer angelegt. Die aktive Hauptversion ist standardmäßig auf Port 5432 gemappt. Auf Port 5432 soll nach der Migration die neueste Version (14) zu erreichen sein.
Alle am Server installierten Postgres-Versionen anzeigen:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 | pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 9.1 main 5441 online postgres /var/lib/postgresql/9 .1 /main /var/log/postgresql/postgresql-9 .1-main.log 9.2 main 5440 online postgres /var/lib/postgresql/9 .2 /main /var/log/postgresql/postgresql-9 .2-main.log 9.3 main 5442 online postgres /var/lib/postgresql/9 .3 /main /var/log/postgresql/postgresql-9 .3-main.log 9.4 main 5437 online postgres /var/lib/postgresql/9 .4 /main /var/log/postgresql/postgresql-9 .4-main.log 9.5 main 5439 online postgres /var/lib/postgresql/9 .5 /main /var/log/postgresql/postgresql-9 .5-main.log 9.6 main 5438 online postgres /var/lib/postgresql/9 .6 /main /var/log/postgresql/postgresql-9 .6-main.log 10 main 5432 online postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main .log 11 main 5433 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11-main .log 12 main 5434 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main .log 13 main 5435 online postgres /var/lib/postgresql/13/main /var/log/postgresql/postgresql-13-main .log 14 main 5436 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main .log |
Welche Version verwenden Commandline-Tools wie z.B. pg_dump?
1 2 3 | pg_dump --version pg_dump (PostgreSQL) 10.21 (Ubuntu 10.21-1.pgdg18.04+1) |
Datenbanken migrieren
Mit pg_dump bzw. pg_dumpall hat PostgreSQL ein integriertes Tool um Datenbanken von einer Server-Version auf die Andere zu migrieren. Die offizielle Dokumentation und der Befehl pg_dump bzw. pg_dumpall sind gut und einfach erklärt. Vor diesem Vorgang stoppt man am besten noch die Applikationen welche auf die Datenbanken zugreifen.
1 | pg_dumpall -p 5432 | psql -d postgres -p 5436 |
Nun verbindet sich das Skript zu jeder Datenbank, welche auf Port 5432 läuft und kopiert diese zum Server auf Port 5436. Möglicherweise wird bei jeder Datenbank das Passwort abgefragt. Dieses wird auf Ubuntu 20.04 ganz unscheinbar mit „SET“ abgefragt.
Wird die Meldung „psql: Fehler: Verbindung zum Server auf Socket »/var/run/postgresql/.s.PGSQL.5436« fehlgeschlagen: FATAL: Rolle »root« existiert nicht“ angezeigt muss zuvor zum entsprechenden Benutzer gewechselt werden – in unserem Fall heißt der Benutzer „postgres“.
Port der aktiven PostgreSQL-Version ändern
Zuerst stoppen wir die aktive Version 10 und die Zielversion 14. Dann wird die Config so geändert, dass Version 14 den Standardport 5432 verwendet und die Postgres-Server wieder gestartet.
1 2 3 4 5 6 7 | pg_ctlcluster 10 main stop pg_ctlcluster 14 main stop pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 10 main 5436 down postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main .log 14 main 5432 down postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main .log |
1 2 3 4 5 6 7 8 9 | vim /etc/postgresql/14/main/postgresql .conf port=5436 zu port=5432 ändern vim /etc/postgresql/10/main/postgresql .conf port=5432 auf port=5436 ändern grep -H '^port' /etc/postgresql/ * /main/postgresql .conf /etc/postgresql/10/main/postgresql .conf:port = 5432 # (change requires restart) /etc/postgresql/14/main/postgresql .conf:port = 5436 # (change requires restart) |
1 2 3 4 5 6 7 | pg_ctlcluster 10 main start pg_ctlcluster 14 main start pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 10 main 5436 online postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log 14 main 5432 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log |
Nun verwendet auch das Kommonadozeilentool pg_dump die aktuelle Version.
1 2 | pg_dump --version pg_dump (PostgreSQL) 14.4 (Ubuntu 14.4-1.pgdg18.04+1) |
Alte PostgreSQL-Versionen löschen
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 | apt-get purge postgresql-9* apt-get purge postgresql-10 apt-get purge postgresql-11 apt-get purge postgresql-12 apt-get purge postgresql-13 apt-get purge postgresql-client-9* apt-get purge postgresql-client-10 apt-get purge postgresql-client-11 apt-get purge postgresql-client-12 apt-get purge postgresql-client-13 pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 14 main 5432 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log |
Hinterlasse einen Kommentar