Estou testando uma atualização do PostgreSQL 8.2.1 para 9.2 em uma máquina virtual executando uma distribuição Linux personalizada. O procedimento de atualização é o seguinte:
- Iniciar o
pg
serviço - Vácuo todos os DBs (não tenho certeza se isso é necessário)
- Backup com
pg_dumpall
- Interrompa o
pg
serviço - Afaste o diretório em que os dados estão armazenados (
/var/pg
; é uma configuração simples de servidor único) - Instale o PostgreSQL 9.2
initdb
- Iniciar o servidor
- Restaurar os dados despejados
reindexdb
todos os bancos de dados- Recrie a
referential_constraints
visualização - Limpe todos os DBs (é necessário o AFAIK após esta atualização)
Este procedimento funciona bem em um host, fazendo backup e restaurando sem problemas. Em outra máquina com um banco de dados diferente, os pontos 1 a 7 funcionam bem, mas o servidor não inicia a menos que eu adicione um sleep 1
depois initdb
, e mesmo assim os dados despejados não podem ser restaurados porque "o sistema do banco de dados está inicializando". Quais são as formas padrão de lidar com isso, exceto por esses terríveis hacks:
sleep
por um período generoso de tempo antes de qualquer operação,- até que funcione ou até que um tempo limite generoso seja alcançado, ou
- até aceitar uma consulta trivial ou atingir um tempo limite.
Edit: A " solução " não funcionou, afinal. O que é necessário para garantir que o banco de dados esteja pronto para executar uma restauração?
initdb
é executado de forma síncrona, portanto, quando o servidor é iniciado, ele initdb
já foi concluído com êxito.
initdb
status de saída? Suponho que quando o trabalho estiver pronto.