22.4. Migração entre versões

Esta seção explica como migrar o banco de dados de uma versão do PostgreSQL para outra versão mais nova. O procedimento de instalação do PostgreSQL não é assunto desta seção; estes detalhes se encontram no Capítulo 14.

Como regra geral, o formato interno de armazenamento dos dados está sujeito a alterações entre versões principais do PostgreSQL (onde muda o número após o primeiro ponto). Isto não se aplica às versões secundárias sob a mesma versão principal (onde muda o número após o segundo ponto); estas versões sempre possuem formatos de armazenamento compatíveis. Por exemplo, as versões 7.0.1, 7.1.2 e 7.2 não são compatíveis, enquanto as versões 7.1.1 e 7.1.2 são compatíveis. Quando é feita a atualização para uma versão compatível, pode-se simplesmente substituir os executáveis e reutilizar o diretório de dados no disco. Caso contrário, é necessário fazer a cópia de segurança dos dados e "restaurá-la" no novo servidor. A cópia de segurança tem de ser feita utilizando o pg_dump; como é óbvio, os métodos de cópia de segurança no nível de sistema operacional não funcionam. São realizadas verificações que impedem que seja utilizado um diretório de dados de uma versão incompatível do PostgreSQL e, portanto, não pode ser causado nenhum grande dano quando se tenta ativar uma versão errada do servidor em um diretório de dados.

É recomendada a utilização dos programas pg_dump e pg_dumpall da nova versão do PostgreSQL, para tirar vantagem das melhorias que podem ter sido introduzidas nestes programas. As versões corrente dos programas de cópia de segurança podem ler os dados de qualquer versão do servidor da 7.0 em diante.

O menor tempo de parada pode ser obtido instalando o novo servidor em um diretório diferente, e executando tanto o servidor novo quanto o antigo em paralelo, em portas diferentes. Depois pode ser executado algo como

pg_dumpall -p 5432 | psql -d template1 -p 6543

para transferir os dados. Se for desejado, pode ser utilizado um arquivo intermediário. Depois o servidor antigo pode ser parado, e o novo servidor ativado na mesma porta que o servidor antigo estava utilizando. Deve haver certeza que o banco de dados antigo não foi atualizado após ser executado o pg_dumpall, senão obviamente serão perdidos dados. Para obter informações sobre como proibir o acesso deve ser visto o Capítulo 19.

Na prática, provavelmente será desejado testar os aplicativos cliente na nova configuração antes de trocar de versão. Este é outro motivo para configurar instalações simultâneas para as versões antiga e nova.

Se não for possível ou não for desejado executar dois servidores em paralelo, pode ser realizada a etapa de cópia de segurança antes de instalar a nova versão, parar o servidor, mover a versão antiga para outro lugar, instalar a nova versão, ativar o novo servidor, e restaurar os dados. Por exemplo:

pg_dumpall > backup
pg_ctl stop
mv /usr/local/pgsql /usr/local/pgsql.old
cd ~/postgresql-8.0.0
gmake install
initdb -D /usr/local/pgsql/data
postmaster -D /usr/local/pgsql/data
psql template1 < backup

As formas de parar e ativar o servidor, e outros detalhes, devem ser vistos no Capítulo 16. As instruções de instalação dão conselhos sobre os lugares estratégicos para realizar estes passos.

Nota: Quando "a instalação antiga é movida para outro lugar", talvez não seja mais totalmente utilizável. Alguns programas executáveis contêm caminhos absolutos para vários programas instalados e arquivos de dados. Isto normalmente não é um grande problema, mas se for planejado utilizar duas instalações em paralelo por um período de tempo, devem ser atribuídos diretórios de instalação diferentes em tempo de construção (Este problema foi corrigido na versão 8.0 e posteriores do PostgreSQL, mas deve-se estar atento ao mesmo quando instalações mais antigas são movidas de lugar).

SourceForge.net Logo CSS válido!