Ich teste ein Upgrade von PostgreSQL 8.2.1 auf 9.2 auf einer virtuellen Maschine, auf der eine benutzerdefinierte Linux-Distribution ausgeführt wird. Das Upgrade-Verfahren ist wie folgt:
- Starten Sie den
pg
Dienst - Saugen Sie alle DBs ab (nicht sicher, ob dies erforderlich ist)
- Backup mit
pg_dumpall
- Beenden Sie den
pg
Dienst - Verschieben Sie das Verzeichnis, in dem die Daten gespeichert sind (
/var/pg
es handelt sich um eine einfache Einrichtung mit nur einem Server). - Installieren Sie PostgreSQL 9.2
initdb
- Starten Sie den Server
- Stellen Sie die gespeicherten Daten wieder her
reindexdb
alle DBs- Erstellen Sie die
referential_constraints
Ansicht neu - Staubsaugen Sie alle DBs (AFAIK nach diesem Upgrade erforderlich)
Dieses Verfahren funktioniert problemlos auf einem Host und kann problemlos gesichert und wiederhergestellt werden. Auf einem anderen Computer mit einer anderen Datenbank funktionieren die Punkte 1 bis 7 einwandfrei, aber der Server wird erst gestartet, wenn ich ein sleep 1
After hinzufüge initdb
, und selbst dann können die ausgegebenen Daten nicht wiederhergestellt werden, da "das Datenbanksystem gestartet wird". Was sind die Standardmethoden, um damit umzugehen, abgesehen von diesen schrecklichen Hacks:
sleep
für eine großzügige Zeitspanne vor jeder Operation,- Schleifen, bis es funktioniert oder bis eine großzügige Zeitüberschreitung erreicht ist, oder
- Schleife, bis eine triviale Abfrage akzeptiert wird oder eine Zeitüberschreitung erreicht ist.
Edit: Die " Lösung " hat doch nicht funktioniert. Was ist erforderlich, um sicherzustellen, dass die Datenbank bereit ist, eine Wiederherstellung auszuführen?
initdb
wird synchron ausgeführt, sodass der Start des Servers initdb
bereits erfolgreich abgeschlossen wurde.
initdb
Exit-Status testen ? Ich nehme an, wenn die Arbeit erledigt ist.