Bei einem Update zu einer neuen “Major Version” von PostgreSQL (zb. 9.5 auf 9.6) musst du deine Daten manuell migrieren. Am einfachsten geht das mit pg_dumpall, aber es gibt auch alternative Methoden. Die können nützlich sein, wenn du eine sehr große Datenbank hast, oder nur einen Teil deiner Daten migrieren willst.
pg_dumpall
Diese Methode ist am einfachsten.
pg_dumpall --quote-all-identifiers | gzip >postgresapp.sql.gz
gunzip <postgresapp.sql.gz | psql
pg_dump
Mit dieser Methode kannst du auswählen, welche Datenbanken du migrieren willst.
psql --list
.pg_dump datenbankname > datenbankname.sql
pg_dumpall --globals-only > globals.sql
psql -f globals.sql
createdb datenbankname
psql -d datenbankname -f datenbankname.sql
pg_upgrade
pg_upgrade
ist etwas komplizierter, weil es die Binaries der alten und neuen Version gleichzeitig benötigt. Sinn macht es nur wenn du sehr große Datenbanken hast und pg_dump
zu langsam ist oder zuviel Festplattenspeicher benötigt. Bevor du mit pg_upgrade
beginnst, solltest du sicher sein dass du den Prozess genau verstehst, und ein Backup hast!
Weil pg_upgrade
alte und neue Binaries gleichzeitig braucht, musst du eine spezielle Version von Postgres.app erstellen. Hier zum Beispiel der Prozess für das Update von 9.4 auf 9.5:
Contents/Versions/9.4
von der alten Postgres.app in die neue Postgres.app~/Library/Application Support/Postgres/var-9.5
(falls er existiert) und erstelle ein leeres Verzeichnis mit dem Namen var-9.5
/Applications/Postgres.app/Contents/Versions/9.5/bin/initdb -D ~/Library/Application\ Support/Postgres/var-9.5 --encoding=UTF-8 --locale=en_US.UTF-8
/Applications/Postgres.app/Contents/Versions/9.5/bin/pg_upgrade -b /Applications/Postgres.app/Contents/Versions/9.4/bin -B /Applications/Postgres.app/Contents/Versions/9.5/bin -d ~/Library/Application\ Support/Postgres/var-9.4 -D ~/Library/Application\ Support/Postgres/var-9.5 -v
(siehe auch die Dokumentation von pg_upgrade)pg_upgrade
erstellt zwei Skripte, analyze_new_cluster.sh
und delete_old_cluster.sh
. Du kannst sie verwenden um das neue Datenverzeichnis zu optimieren und das alte zu löschen.