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)
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
.
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",
}
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:
... et je suis à court d'idées;)
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 systemd
qui 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 systemd
et j'ai utilisé aptitude pour savoir quelles sont les demandes d'installation de systemd
version 204, sur mon système était upower
name__, je n'ai pas besoin de upower
name__. 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 systemd
name__.
AVERTISSEMENT: S'il vous plaît, soyez prudent avant de retirer un paquet, faites attention à ce qui va être retiré très soigneusement.