web-dev-qa-db-fra.com

PostgreSQL ne parvient pas à réinstaller après la mise à niveau de Ubuntu 12.04 à 14.04

J'ai exécuté do-release-upgrade pour mettre à jour un serveur Ubuntu 12.04 vers Ubuntu 14.04. Cela a semblé bien se dérouler, mais lorsque j'ai fait apt-get update après la mise à niveau, je me suis aperçu que les paquets PostgreSQL examinaient toujours le dépôt précis au lieu du digne de confiance . J'ai suivi le instructions ici pour ajouter le dépôt sécurisé et déplacé le fichier .list contenant le dépôt précis dans un répertoire temporaire en guise de sauvegarde. Après cela, Sudo apt-get upgrade a échoué et je n'ai pas réussi à le faire fonctionner à nouveau complètement, même après la restauration du repo precise . Je ne suis pas arrivé à saisir les messages d'erreur. Comme il s’agit d’un serveur de développement et que toutes les données ne sont pas essentielles, j’ai simplement décidé de réinstaller PostgreSQL. Cela a échoué à plusieurs reprises après plusieurs tentatives pour effacer toute configuration personnalisée que nous aurions pu avoir sur le serveur et que je pensais pouvoir interférer. Je suis capable de faire Sudo apt-get install postgresql-common avec succès, mais si j'essaie Sudo apt-get install postgresql-9.5, cela échoue avec ce qui suit:

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

Si j'essaie systemctl status [email protected] je reçois:

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

Le fichier journal /var/log/postgresql/postgresql-9.5-main.log est vide, donc je ne sais pas où trouver les journaux. Après avoir échoué à l’installation, je passe par les étapes décrites ici pour effectuer une désinstallation complète. Je ne peux pas dire s'il s'agit d'un problème avec PostgreSQL ou le serveur mis à niveau.

UPDATE: La sortie 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)
6
Shaun

J'ai eu le même problème, mis à jour Ubuntu 12.04 à 14.04. Je ne sais pas mais c'est aussi en utilisant systemd. Lors de la vérification du fichier /etc/init.d/postgresql, il utilise /usr/share/postgresql-common/init.d-functions.

Ce fichier exécute/usr/bin/pg_ctlcluster pour démarrer et arrêter le serveur postgresql.

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

Le fichier /usr/bin/pg_ctlcluster accepte l'option --skip-systemctl-redirect pour démarrer ou arrêter postgresql sans systectl.

Vous devez donc ajouter --skip-systemctl-redirect dans /usr/share/postgresql-common/init.d-functions dans la fonction do_ctl_all (). Donc ça va ressembler à ça.

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

Ou vous pouvez ajouter $skip_systemctl_redirect = 1; avant que $skip_systemctl_redirect soit coché dans /usr/bin/pg_ctlcluster.

9
Shivaditya

Le même problème sur Ubuntu est passé de 12.04 à 14.04.

Fixé en ajoutant la ligne

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

dans /usr/share/postgresql-common/init.d-functions after

init_functions=/lib/lsb/init-functions

dans la marionnette il ressemble à ceci

  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",
  }
7
Sergey Gals

ré-édition: Ubuntu 14.04 n’utilise pas systemd par défaut pour la gestion service/init. Pour une raison quelconque, votre installation utilise à l'aide de systemd (savez-vous pourquoi?), Mais vous devez utiliser upstart avec un wrapper pour les scripts de démarrage sysV hérités.

Le paquet postgresql-9.5 ne fournit pas de fichier d'unité de démarrage systemd, mais un script sysV que Upstart gère très bien (juste testé ici).

Options possibles:

  1. Revenir au début pour la gestion d'init
  2. Écrivez votre propre script de démarrage systemd pour postgresql-9.5

... et je suis à court d'idées;)

1
cleary

Après des recherches, je suis arrivé à ce poste car mon serveur dispose de plusieurs versions de Postgresql 9.4, 9.5, 9.6 et a le même comportement.

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

Essayer de démarrer postgresql continue de montrer:

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.

Après avoir lu toutes les réponses, j'aime plus la réponse: https://askubuntu.com/a/877472/130195 Mais si veut garder systemdqui n'est pas entièrement pris en charge par Ubuntu 14.04, suivez ce hack.

Mais je pense que nous n'avons pas besoin de systemdet j'ai utilisé aptitude pour savoir quelles sont les demandes d'installation de systemdversion 204, sur mon système était upowername__, je n'ai pas besoin de upowername__. Supprimer tout ce dont je n’avais plus besoin et les trois versions de postgresql fonctionnent à nouveau.

Je pense qu’un simple Sudo apt-get purge systemd && Sudo apt-get autoremove résout mieux le problème en supprimant le paquet systemdname__.

AVERTISSEMENT: S'il vous plaît, soyez prudent avant de retirer un paquet, faites attention à ce qui va être retiré très soigneusement.

1
Rui Andrada