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
pgDienst - Saugen Sie alle DBs ab (nicht sicher, ob dies erforderlich ist)
- Backup mit
pg_dumpall - Beenden Sie den
pgDienst - Verschieben Sie das Verzeichnis, in dem die Daten gespeichert sind (
/var/pges 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
reindexdballe DBs- Erstellen Sie die
referential_constraintsAnsicht 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 1After 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:
sleepfü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?
initdbwird synchron ausgeführt, sodass der Start des Servers initdbbereits erfolgreich abgeschlossen wurde.
initdbExit-Status testen ? Ich nehme an, wenn die Arbeit erledigt ist.