Postgres.app

Der schnellste Weg zu PostgreSQL am Mac

Datenmigration

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.

Migration mit pg_dumpall

Diese Methode ist am einfachsten.

  1. Stelle sicher dass die alte Version von Postgres.app noch läuft
  2. Erstelle einen komprimierten SQL-Dump von deinem Server (das kann eine Weile dauern):
    pg_dumpall --quote-all-identifiers | gzip >postgresapp.sql.gz
  3. Beende die alte Version von Postgres.app, starte die neue Version
  4. Nun kannst du den SQL-Dump wiederherstellen:
    gunzip <postgresapp.sql.gz | psql

Migration mit pg_dump

Mit dieser Methode kannst du auswählen, welche Datenbanken du migrieren willst.

  1. Stelle sicher dass die alte Version von Postgres.app noch läuft, und hol dir eine Liste von Datenbanken mit dem Kommando psql --list.
  2. Erstelle einen Dump von jeder Datenbank die du migrieren willst mit pg_dump datenbankname > datenbankname.sql
  3. Wenn du Benutzer oder Tablespaces konfiguriert hast, exportiere sie mit pg_dumpall --globals-only > globals.sql
  4. Beende die alte Version von Postgres.app, starte die neue Version
  5. Falls zutreffend, stelle Benutzer etc. wieder her mit psql -f globals.sql
  6. Erstelle nun die benötigten Datenbanken: createdb datenbankname
  7. Importiere nun die Daten in jede deiner Datenbanken mit psql -d datenbankname -f datenbankname.sql
  8. Sobald du sicher bist das alles funktioniert kannst du das alte Datenverzeichnis löschen

Migration mit 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:

  1. Beende Postgres.app
  2. Rechtsklick auf das alte Postgres.app und “Paketinhalt zeigen” auswählen
  3. Rechtsklick auf das neue Postgres.app und “Paketinhalt zeigen” auswählen
  4. Kopiere den Ordner Contents/Versions/9.4 von der alten Postgres.app in die neue Postgres.app
  5. Bewege nun die modifizierte, neue Version von Postgres.app in den Programme-Ordner
  6. Lösche nun den Ordner ~/Library/Application Support/Postgres/var-9.5 (falls er existiert) und erstelle ein leeres Verzeichnis mit dem Namen var-9.5
  7. Initialisiere einen neuen Datenbankcluster mit dem Befehl /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
  8. Führe das Migration durch mit dem Befehl /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)
  9. 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.