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_dumpallDiese Methode ist am einfachsten.
pg_dumpall --quote-all-identifiers | gzip >postgresapp.sql.gzgunzip <postgresapp.sql.gz | psqlpg_dumpMit dieser Methode kannst du auswählen, welche Datenbanken du migrieren willst.
psql --list.pg_dump datenbankname > datenbankname.sqlpg_dumpall --globals-only > globals.sqlpsql -f globals.sqlcreatedb datenbanknamepsql -d datenbankname -f datenbankname.sqlpg_upgradepg_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.