PostgreSQL não consegue reinstalar após a atualização do Ubuntu 12.04 para 14.04

5

Corri o do-release-upgrade para atualizar um servidor Ubuntu 12.04 para o Ubuntu 14.04. Pareceu ir tranquilamente, mas quando eu fiz apt-get update após a atualização eu notei que os pacotes do PostgreSQL ainda estavam olhando para os repositórios precisos ao invés dos repositórios confiáveis . Eu segui as instruções aqui para adicionar os repositórios confiáveis e movi o arquivo .list contendo os repositórios precisos para um diretório temporário como um backup. Depois que fiz isso, sudo apt-get upgrade falhou e não consegui executá-lo completamente novamente, mesmo depois de restaurar os repositórios precisos . Eu não aconteceu de pegar as mensagens de erro. Como este é um servidor de desenvolvimento e todos os dados não são essenciais, decidi reinstalar o PostgreSQL. Isso repetidamente falhou após várias tentativas de limpar qualquer configuração personalizada que tenhamos tido no servidor que eu achei que poderia estar interferindo. Eu posso fazer sudo apt-get install postgresql-common com sucesso, mas se eu tentar sudo apt-get install postgresql-9.5 ele falhará com o seguinte:

Setting up postgresql-9.5 (9.5.5-1.pgdg14.04+1) ...
Creating new cluster 9.5/main ...
  config /etc/postgresql/9.5/main
  data   /var/lib/postgresql/9.5/main
  locale en_US.UTF-8
  socket /var/run/postgresql
  port   5432
update-alternatives: using /usr/share/postgresql/9.5/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode
 * Starting PostgreSQL 9.5 database server                                                                                             
 * Failed to issue method call: Unit [email protected] failed to load: No such file or directory. See system logs and 'systemctl status [email protected]' for details.
                                                                                                                               [fail]
invoke-rc.d: initscript postgresql, action "start" failed.
dpkg: error processing package postgresql-9.5 (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of postgresql-contrib-9.5:
 postgresql-contrib-9.5 depends on postgresql-9.5 (= 9.5.5-1.pgdg14.04+1); however:
  Package postgresql-9.5 is not configured yet.

dpkg: error processing package postgresql-contrib-9.5 (--configure):
 dependency problems - leaving unconfigured
Setting up sysstat (10.2.0-1) ...
No apport report written because the error message indicates its a followup error from a previous failure.
                                                                                                          update-alternatives: using /usr/bin/sar.sysstat to provide /usr/bin/sar (sar) in auto mode
Processing triggers for libc-bin (2.19-0ubuntu6.9) ...
Errors were encountered while processing:
 postgresql-9.5
 postgresql-contrib-9.5
E: Sub-process /usr/bin/dpkg returned an error code (1)

Jan 17 15:31:31 beta kernel: [    4.029504] systemd-journald[543]: Failed to resolve 'systemd-journal' group: No such process

Se eu tentar systemctl status [email protected] , obtenho:

[email protected]
   Loaded: error (Reason: No such file or directory)
   Active: inactive (dead)

O arquivo de log /var/log/postgresql/postgresql-9.5-main.log está vazio, então não tenho certeza de onde mais verificar logs. Depois de não instalar, eu passo por as etapas aqui para fazer uma desinstalação completa. Não posso dizer se isso é um problema com o PostgreSQL ou com o servidor atualizado.

UPDATE: A saída de dpkg -l "postgresql*" :

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                         Version             Architecture        Description
+++-============================-===================-===================-==============================================================
un  postgresql-7.4               <none>              <none>              (no description available)
un  postgresql-8.0               <none>              <none>              (no description available)
un  postgresql-9.1               <none>              <none>              (no description available)
iF  postgresql-9.5               9.5.5-1.pgdg14.04+1 amd64               object-relational SQL database, version 9.5 server
un  postgresql-client            <none>              <none>              (no description available)
ii  postgresql-client-9.5        9.5.5-1.pgdg14.04+1 amd64               front-end programs for PostgreSQL 9.5
ii  postgresql-client-common     178.pgdg14.04+1     all                 manager for multiple PostgreSQL client versions
ii  postgresql-common            178.pgdg14.04+1     all                 PostgreSQL database-cluster manager
iU  postgresql-contrib-9.5       9.5.5-1.pgdg14.04+1 amd64               additional facilities for PostgreSQL
un  postgresql-doc-9.5           <none>              <none>              (no description available)
    
por Shaun 17.01.2017 / 23:02

4 respostas

5

Eu tive o mesmo problema, atualizei o Ubuntu 12.04 para o 14.04. Não sei, mas também usando o systemd. Ao verificar o arquivo /etc/init.d/postgresql , ele usa /usr/share/postgresql-common/init.d-functions .

Este arquivo executa / usr / bin / pg_ctlcluster para iniciar e parar o servidor postgresql.

if [ "" = "stop" ] || [ "" = "restart" ]; then
    ERRMSG=$(pg_ctlcluster --force "" "$name"  2>&1)
else
    ERRMSG=$(pg_ctlcluster "" "$name"  2>&1)
fi
O arquivo

/usr/bin/pg_ctlcluster aceita a opção --skip-systemctl-redirect para iniciar ou parar o postgresql sem o systectl.

Portanto, você precisa adicionar a função --skip-systemctl-redirect in /usr/share/postgresql-common/init.d-functions in do_ctl_all (). Então vai ficar assim.

if [ "" = "stop" ] || [ "" = "restart" ]; then
    ERRMSG=$(pg_ctlcluster --skip-systemctl-redirect --force "" "$name"  2>&1)
else
    ERRMSG=$(pg_ctlcluster --skip-systemctl-redirect "" "$name"  2>&1)
fi

Ou você pode adicionar $skip_systemctl_redirect = 1; antes de $skip_systemctl_redirect ser verificado em /usr/bin/pg_ctlcluster .

    
por Shivaditya 29.01.2017 / 09:33
6

O mesmo problema no Ubuntu foi atualizado de 12.04 para 14.04

Corrigido pela adição da linha

alias pg_ctlcluster="pg_ctlcluster --skip-systemctl-redirect"

em /usr/share/postgresql-common/init.d-functions depois de

init_functions=/lib/lsb/init-functions

no boneco, parece com isso

  package { 'postgresql-common': ensure => 'installed' }
  file_line { 'Patch 1 /usr/share/postgresql-common/init.d-functions':
    path => '/usr/share/postgresql-common/init.d-functions',
    line => 'alias pg_ctlcluster="pg_ctlcluster --skip-systemctl-redirect"',
    after => "init_functions=/lib/lsb/init-functions",
  }
    
por Sergey Gals 21.02.2017 / 14:42
1

reedite: O Ubuntu 14.04 não usa o systemd por padrão para o gerenciamento de serviços / init. Por alguma razão, a sua instalação é usando o systemd (você sabe por quê?), Mas ele deve estar usando o upstart com um wrapper para scripts de inicialização do sysv legado.

O pacote postgresql-9.5 não fornece um arquivo de unidade de inicialização do systemd, em vez disso, ele fornece um script sysV que o upstart manipula bem (apenas testado aqui).

Opções possíveis:

  1. Mude de volta para o upstart para o gerenciamento de init
  2. Escreva seu próprio script de inicialização do systemd para o postgresql-9.5

... e estou sem ideias;)

    
por cleary 17.01.2017 / 23:31
0

Após a pesquisa, cheguei a este post porque meu servidor tem várias versões do Postgresql 9.4, 9.5, 9.6 e tem o mesmo comportamento.

sudo pg_lsclusters 9.4 main status
Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5432 down   postgres /var/lib/postgresql/9.4/main 
/var/log/postgresql/postgresql-9.4-main.log
9.5 main    5433 down   postgres /var/lib/postgresql/9.5/main 
/var/log/postgresql/postgresql-9.5-main.log
9.6 main    5434 down   postgres /var/lib/postgresql/9.6/main 
/var/log/postgresql/postgresql-9.6-main.log

Tentando iniciar o postgresql, continue mostrando:

sudo pg_ctlcluster 9.4 main start
Redirecting start request to systemctl
Failed to issue method call: Unit [email protected] failed to load: No such file or directory. See system logs and 'systemctl status [email protected]' for details.

Depois de ler todas as respostas, eu gosto mais da resposta: link Mas se quiser manter o systemd instalado que não é totalmente suportado pelo Ubuntu 14.04, siga esse truque.

Mas eu acho que não precisamos de systemd e eu usei o aptitude para saber o que é a demanda para instalar systemd versão 204, no meu sistema era upower , eu não preciso de upower . Removendo qualquer coisa que eu não precisei mais e todas as três versões do postgresql estão funcionando novamente.

Acho que apenas um simples sudo apt-get purge systemd && sudo apt-get autoremove resolve melhor o problema removendo systemd package.

AVISO: Por favor, tenha cuidado antes de remover qualquer pacote, preste atenção ao que será removido com muito cuidado.

    
por Rui Andrada 05.04.2017 / 05:54