Eu encontrei uma maneira de fazer isso, mas não tenho certeza se é a maneira correta / recomendada. Meus passos estão abaixo:
1. Salve a configuração existente
Execute sudo vim /var/lib/pgsql9/data/postgresql.conf
e sudo vim /var/lib/pgsql9/data/pg_hba.conf
e copie todas as configurações não comentadas em algum lugar. Mais tarde você terá que configurá-los manualmente na nova versão do PostgreSQL.
2. Instale a nova versão do PostgreSQL
Use yum list
para encontrar os nomes de pacotes corretos e instalá-los. No meu caso, eu precisava de sudo yum install postgresql94.x86_64
e sudo yum install postgresql94-server.x86_64
Execute postgres --version
, pg_dumpall --version
e psql --version
para garantir que a versão foi atualizada para a nova.
3. Salve os dados existentes e encerre o banco de dados
Interrompa todos os processos que possam alterar o banco de dados (por exemplo, seu aplicativo da web). Execute sudo pg_dumpall >db.out
, seguido por sudo service postgresql stop
logo depois disso para parar o servidor e evitar mais alterações de dados. Examine o despejo de dados resultante com vim db.out
- ele deve ter todos os seus dados e esquema do banco de dados no formato SQL simples. Você pode querer fazer o backup deste arquivo antes de continuar.
4. Salve o diretório antigo do banco de dados
sudo mv /var/lib/pgsql9 /var/lib/pgsql9.old
5. Crie um novo diretório de banco de dados para a nova versão do PostgreSQL
sudo mkdir /var/lib/pgsql9
sudo chown postgres /var/lib/pgsql9
sudo su postgres
No prompt sudo su
:
initdb -D /var/lib/pgsql9/data
Em seguida, pressione Ctrl-D
6. Copie os certificados para o novo diretório do banco de dados
Se você estiver usando certificados, copie-os para o novo diretório e dê a eles a propriedade adequada, por exemplo:
sudo cp /var/lib/pgsql9.old/data/server.key /var/lib/pgsql9/data
sudo cp /var/lib/pgsql9.old/data/server.crt /var/lib/pgsql9/data
sudo chown postgres /var/lib/pgsql9/data/server.crt
sudo chown postgres /var/lib/pgsql9/data/server.key
7. Configurar o novo banco de dados
Use sudo vim /var/lib/pgsql9/data/postgresql.conf
e sudo vim /var/lib/pgsql9/data/pg_hba.conf
para configurar o banco de dados de acordo com as configurações salvas na etapa 1.
8. Corrija o serviço postgresql para apontar para a nova versão
Executar ls -ila /etc/rc.d/init.d
- observe como você tem um script para cada versão ( postgresql92
, postgresql94
), mas o postgresql
está vinculado à versão antiga. Corrija isso executando sudo ln -sf /etc/rc.d/init.d/postgresql94 /etc/rc.d/init.d/postgresql
e execute o comando ls
novamente para verificar se o link está correto.
9. Execute o serviço
Execute sudo service postgresql start
. Se o serviço falhar ao iniciar, é provável que seja um erro de permissão (você esqueceu a chown
acima) ou um erro de sintaxe de configuração. Você pode examinar os logs ( /var/lib/pgsql94/pgstartup.log
e os arquivos em /var/lib/pgsql9/data/pg_log
) para procurar o erro. Se o serviço foi iniciado corretamente, você pode executar sudo su postgres
, depois psql
para verificar se seu banco de dados está em execução (use \q
para sair e pressione Ctrl-D para sair de sudo su
).
10. Restaure seus dados antigos
sudo cp db.out /var/lib/pgsql9/data
sudo chown postgres /var/lib/pgsql9/data/db.out
sudo su postgres
E nesse prompt:
psql -d postgres -f /var/lib/pgsql9/data/db.out
Você deve ver um monte de comandos de banco de dados. Nesse ponto, seu banco de dados é atualizado e está em execução. Você pode verificar executando psql
. Use o comando \list
para ver uma lista de bancos de dados, \connect (database_name)
para se conectar ao seu banco de dados, \dt
para ver uma lista de tabelas uma vez conectadas ou executar comandos SQL terminados por ponto-e-vírgula. Digite \q
para sair.
Depois de verificar, pressione Ctrl-D
para sair de sudo su
.
11. Limpar
Neste ponto, quando tiver certeza de que tudo está funcionando, você poderá remover /var/lib/pgsql9.old
, /var/lib/pgsql9/db.out
, db.out
e quaisquer outros backups.