Limpar instalações postgresql conflitantes

0

Eu tenho uma pequena caixa de desenvolvimento que atualizei para o Debian 8.5 (para ter um apache e um postgres atuais que combinem melhor com os servidores produtivos). Agora eu tenho o Postgres 9.1 (antigo) e 9.4 (que eu gostaria de usar):

$ systemctl | grep postgres
 postgresql.service            loaded active exited    PostgreSQL RDBMS
 [email protected]   loaded failed failed    PostgreSQL Cluster 9.1-main
 [email protected]   loaded active running   PostgreSQL Cluster 9.4-main
 system-postgresql.slice       loaded active active    system-postgresql.slice

O serviço PostgreSQL 9.4 foi configurado automaticamente para servir na porta não-padrão 5433, que eu mudei; agora, claro, não é possível executar os dois. Eu não quero rodar as duas versões; Eu quero que o PostgreSQL 9.4 sirva meus bancos de dados existentes.

Posso recuperar para tornar meus bancos de dados utilizáveis novamente assim:

$ systemctl stop [email protected]
$ systemctl start [email protected]

Isso me traz de volta meus bancos de dados, mas é claro, com o mecanismo de banco de dados desatualizado.

Como eu limparia essa bagunça? Posso desinstalar a versão 9.1 sem perder meus dados? Ou devo exportar meus bancos de dados e recriá-los? E quanto aos bancos de dados do sistema ( postgres , template1 e similares)?

    
por Tobias 15.07.2016 / 17:55

1 resposta

2

Depois de algumas dificuldades, foi isso que encontrei:

Existem duas grandes possibilidades mencionadas nos documentos :

  1. Use pg_dumpall para exportar os dados do serviço antigo e psql para importá-los no novo;
  2. Use pg_upgrade .

Meu conselho é: a menos que você tenha motivos convincentes para não fazê-lo, use o método pg_dumpall :

  1. Exportar tudo do antigo serviço de banco de dados (se a nova versão já estiver instalada, use o novo pg_dumpall binary);
  2. Importe tudo no novo serviço de banco de dados.
  3. Pare o antigo serviço de banco de dados.
  4. Verifique se você tem todas as alterações feitas em postgresql.conf e pg_hba.conf na configuração da nova versão. reinicie o novo serviço, se necessário.
  5. Teste se seus aplicativos ainda funcionam.
  6. Desinstale a versão antiga.

No meu caso (use -p <Port> conforme apropriado):

sudo -s -u postgres
cd /tmp/
pg_dumpall -p 5433 > all.sql
psql -f all.sql

e, como root :

systemctl stop [email protected]
vimdiff /etc/postgresql/9.{1,4}/main/postgresql.conf
vimdiff /etc/postgresql/9.{1,4}/main/pg_hba.conf
systemctl restart [email protected]
apt-get remove postgresql-client-9.1 postgresql-9.1

O método pg_upgrade exige que você descubra e especifique:

  • os diretórios de dados antigos e novos (por exemplo, grep data_directory /etc/postgresql/9.{1,4}/main/postgresql.conf )
  • os diretórios dos binários antigos e novos (por exemplo, dpkg --listfiles postgresql-9.1 | grep '/bin$' )
  • Você precisa começar a partir de um diretório em que o usuário postgres possa escrever

... e ainda não funciona necessariamente (veja, por exemplo, pg_upgrade falha com um erro não especificado ).

    
por 18.07.2016 / 14:59