Estoy probando una actualización de PostgreSQL 8.2.1 a 9.2 en una máquina virtual que ejecuta una distribución de Linux personalizada. El procedimiento de actualización es el siguiente:
- Inicia el
pg
servicio - Aspire todas las bases de datos (no estoy seguro si es necesario)
- Copia de seguridad con
pg_dumpall
- Detener el
pg
servicio - Aleje el directorio donde se almacenan los datos (
/var/pg
es una configuración simple de servidor único) - Instalar PostgreSQL 9.2
initdb
- Iniciar el servidor
- Restaurar los datos volcados
reindexdb
todos los DB- Recrea la
referential_constraints
vista - Aspire todos los DB (se requiere AFAIK después de esta actualización)
Este procedimiento funciona bien en un host, haciendo copias de seguridad y restaurando sin problemas. En otra máquina con una base de datos diferente, los puntos 1 a 7 funcionan bien, pero el servidor no se iniciará a menos que agregue un sleep 1
después initdb
, e incluso entonces los datos volcados no se pueden restaurar porque "el sistema de base de datos se está iniciando". ¿Cuáles son las formas estándar de lidiar con esto, a excepción de estos terribles hacks:
sleep
Durante un tiempo generoso antes de cualquier operación,- bucle hasta que funcione o hasta que se alcance un tiempo de espera generoso, o
- bucle hasta que acepta una consulta trivial o se alcanza un tiempo de espera.
Editar: La " solución " no funcionó después de todo. ¿Qué se necesita para asegurarse de que la base de datos esté lista para ejecutar una restauración?
initdb
se ejecuta de forma síncrona, por lo que cuando el servidor se inicia initdb
ya ha finalizado correctamente.
initdb
estado de salida? Supongo que cuando se establece el trabajo está hecho.