Grundsätzlich gibt es drei Möglichkeiten, ein Upgrade von PostgreSQL von verschiedenen Hauptversionen (z. B. 9.1 auf 9.3) durchzuführen.
Upgraden mit pg_dump
Die erste und wenn möglich empfohlene Methode besteht darin, einen Speicherauszug der alten (9.1) Version mit der Binärdatei der neueren (9.3) Version zu erstellen und auf einem neuen Cluster wiederherzustellen, der mit der neueren Version erstellt wurde.
Dieser Ansatz ist im Allgemeinen der langsamere, aber auch der praktikabelste. Ein Tipp, um es schneller zu machen, ist die Verwendung von Parallelität. Um mit parallelen Jobs zu sichern, können Sie Folgendes tun:
$ pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase
Sie müssen dies für jede vorhandene Datenbank tun, den --jobs=4
Wert an einen beliebigen Wert anpassen (testen Sie einige Werte von 2 bis zur Anzahl der Kerne und finden Sie heraus, welche eine bessere Geschwindigkeit ergibt). Während dieser Phase sollte auch niemand mit der Datenbank verbunden sein. Jede Änderung führt zu einem beschädigten Speicherauszug (aufgrund der nicht sicheren Option --no-synchronized-snapshots
).
Danach können Sie den Speicherauszug in der neuen Instanz wiederherstellen, indem Sie Folgendes verwenden pg_restore
:
$ createdb <options> -T template0 mydatabase
$ pg_restore --exit-on-error --jobs=4 --dbname=mydatabase /path/to/mydump
Danach wird empfohlen, ANALYZE
auf Ihrer Datenbank auszuführen :
$ vacuumdb --analyze-only mydatabase
(wenn Sie die Zeit leisten können, führen nur --analyze
zu auch VACUUM
die Datenbank und aktualisieren die Sichtbarkeit abbildet)
Upgrade mit pg_upgrade durchführen
Eine andere Möglichkeit ist die Verwendung des Beitragespg_upgrade
. Mit dieser --link
Methode können Sie PostgreSQL sehr schnell aktualisieren.
Vor der Verwendung müssen Sie eine Sicherungskopie des gesamten Datenverzeichnisses erstellen, da im --link
Modus bei einem Fehler möglicherweise beide Daten (neu und alt) verloren gehen. Lesen Sie auch die gesamten Dokumente und insbesondere die Hinweise unten (es gibt einige Einschränkungen für pg_upgrade).
UPDATE: Bitte verwenden Sie die --check
Option, bevor Sie den endgültigen Befehl ausführen. Bei großen Datenbanken ist es außerdem empfehlenswert, diesen Befehl in einer Bildschirmsitzung auszuführen.
Upgrade mit einem Trigger-basierten Replikationstool
Eine weitere Option zum Aktualisieren einer Version ist die Verwendung eines Replikationstools, das auf einem Trigger basiert. Wie Slony, Bucardo und Londiste.
Diese Option erfordert die geringstmögliche Ausfallzeit, ist jedoch am schwierigsten zu bearbeiten.
Dazu müssen Sie einen Master-Slave erstellen, bei dem der Master Ihre aktuelle Version (9.1) und der Slave die neue Version (9.3) ist. Sie warten dann die erste Synchronisierung (mit dem System, das noch in Produktion ist), danach schließen Sie alle mit der Datenbank verbundenen Benutzer (die Ausfallzeit beginnt hier), warten, bis der Slave aufholt, befördern ihn (den Slave) zum Master und Leiten Sie alle Clients / Anwendungen auf diese neue Version um. Und du bist fertig.
Die Slony-Dokumentation bietet eine schrittweise Anleitung zum Upgrade von PostgreSQL mit Slony .
Welches zu wählen
Nun, wie immer hängt es davon ab, wieder aufzunehmen:
- Die Dump + Wiederherstellung ist die zuverlässigste, aber im Allgemeinen die langsamste (die Parallelität kann jedoch recht gute Ergebnisse liefern).
- Das pg_upgrade ist eine der besten Optionen für geringe Ausfallzeiten (wenn Sie es verwenden können, beachten Sie die Einschränkungen). Selbst bei großen Datenbanken dauert es oft nur wenige Minuten
- Die Trigger-Replikation ist ohne Zweifel diejenige, die die geringstmögliche Ausfallzeit (nahe Null) bietet, aber sie ist wirklich schwer zu erreichen, und ich empfehle sie nur erfahrenen Personen (sowohl auf PostgreSQL als auch auf dem Replikationstool).
Ich hoffe ich konnte helfen. Viel Glück.