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.