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:
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?
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.
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.
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
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)
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.
pg_dump --version
pg_dump (PostgreSQL) 14.4 (Ubuntu 14.4-1.pgdg18.04+1)
Alte PostgreSQL-Versionen löschen
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