Am Donnerstag ist die Version 9.6 des populären PostgreSQL-Datenbanksystems erschienen. Das passt mir gerade ganz gut, weil ich mein bestehendes PostgreSQL wegen noch nicht unterstützten JSON-Funktionen von der Version 9.4 auf 9.5 migrieren will.
Wer gerade nicht die neusten PostgreSQL-Funktionen nutzt, könnte trotzdem von einem Update profitieren. Gleichzeitig ist nämlich auch das Admin-Werkzeug pgAdmin in der Version 4 mit einem ganz neuen Design erschienen.
Falls man die Daten seiner alten Datenbank in die neue Datenbank überführen möchte, dann muss man die auszuführenden Schritte etwas planen. Bei mir sah das so aus:
- bestehenden Port 5432 der 9.4er-Version ändern
- die neue 9.6er Version installieren mit Port 5432
- Datenbank-Daten von bestehender Datenbank zu neuer Datenbank kopieren
- eventuell alte Datenbank abschalten oder deinstallieren
Wie man sein Datenbanksystem konfiguriert und aktualisiert, hängt von dem Betriebssystem und der zuvor gewählten Installationsmethode ab. Gerade bei dem freien PostgreSQL gibt es einige Methoden – auch für den Mac. Ich hatte mich bei der 9.4er-Version für den „Interactive installer by EnterpriseDB“ entschieden und mich bei der Migration von dieser Stackoverflow-Frage leiten lassen:
How to upgrade PostgreSQL from version 9.4 to version 9.5 without losing data?
1. Bestehenden Port 5432 der 9.4er-Version ändern
-
PostgreSQL 9.4-Verzeichnis auf Mac mit dem genannten Installer:
/Library/PostgreSQL/9.4
- PostgreSQL 9.4 stoppen:
sudo -u postgres /Library/PostgreSQL/9.4/bin/pg_ctl -D/Library/PostgreSQL/9.4/data stop
- Ports anpassen, z.B. von 5432 auf 5435
nano /Library/PostgreSQL/9.6/pg_env.sh
sudo -u postgres nano /Library/PostgreSQL/9.6/data/postgresql.conf
- PostgreSQL 9.4 starten:
sudo -u postgres /Library/PostgreSQL/9.4/bin/pg_ctl -D/Library/PostgreSQL/9.4/data start
2. Die neue 9.6er Version installieren mit Port 5432
Der zugehörige Application Stack Builder ermöglicht es, problemlos weitere Versionen (wie beispielsweise die 9.6er-Version) zu installieren. Es wird automatisch der erste freie Port ab 5432 ausgewählt.
Damit laufen jetzt beide PostgreSQL-Systeme parallel:
ps aux | grep post postgres 89 0,0 0,0 2647976 1324 ?? Ss 12:46pm 0:00.19 /Library/PostgreSQL/9.6/bin/postmaster -D/Library/PostgreSQL/9.6/data postgres 83 0,0 0,0 2658004 1440 ?? Ss 12:46pm 0:00.45 /Library/PostgreSQL/9.4/bin/postmaster -D/Library/PostgreSQL/9.4/data
3. Datenbank-Daten von bestehender Datenbank zu neuer Datenbank kopieren
Das Kopieren der Daten können wir entweder komplett für das ganze System mit pg_dumpall
oder für einzelne Datenbanken mit pg_dump
durchführen.
Kopieren aller Daten in das neue System:
/Library/PostgreSQL/9.6/bin/pg_dumpall -p 5435 -U postgres | /Library/PostgreSQL/9.6/bin/psql -p 5432 -U postgres
Kopieren der Daten einer Datenbank in das neue System, wobei man zunächst die Benutzer und die Datenbank erstellen muss:
/Library/PostgreSQL/9.6/bin/psql -p 5432 -U postgres -c "CREATE USER my_user" /Library/PostgreSQL/9.6/bin/psql -p 5432 -U postgres -c "ALTER USER my_user WITH PASSWORD 'my_pw'"; /Library/PostgreSQL/9.6/bin/psql -p 5432 -U postgres -c "CREATE DATABASE my_db WITH OWNER = my_user";
/Library/PostgreSQL/9.6/bin/pg_dump -p 5435 -U postgres -d my_db | /Library/PostgreSQL/9.6/bin/psql -p 5432 -U postgres -d my_db
Fazit
Damit sollten bestehende Anwendungen weiterhin funktionieren, ohne dass sie etwas von der neuen Datenbank bemerken. Wenn das der Fall ist, dann können wir die alten Datenbanken oder auch das gesamte PostgreSQL 9.4 löschen. Viel Spaß mit den neuen Funktionen von PostgreSQL 9.6 und PgAdmin 4.