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
pgservicio - Aspire todas las bases de datos (no estoy seguro si es necesario)
- Copia de seguridad con
pg_dumpall - Detener el
pgservicio - Aleje el directorio donde se almacenan los datos (
/var/pges una configuración simple de servidor único) - Instalar PostgreSQL 9.2
initdb- Iniciar el servidor
- Restaurar los datos volcados
reindexdbtodos los DB- Recrea la
referential_constraintsvista - 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 1despué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:
sleepDurante 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?
initdbse ejecuta de forma síncrona, por lo que cuando el servidor se inicia initdbya ha finalizado correctamente.
initdbestado de salida? Supongo que cuando se establece el trabajo está hecho.