it-swarm.com.de

PostgreSQL kann nach dem Upgrade von Ubuntu 12.04 auf 14.04 nicht erneut installiert werden

Ich habe do-release-upgrade ausgeführt, um einen Ubuntu 12.04-Server auf Ubuntu 14.04 zu aktualisieren. Es schien reibungslos zu verlaufen, aber als ich apt-get update nach dem Upgrade tat, bemerkte ich, dass die PostgreSQL-Pakete immer noch die präzisen Repos betrachteten anstatt die vertrauenswürdigen Repos. Ich folgte den Anweisungen hier , um die vertrauenswürdigen Repos hinzuzufügen, und verschob die .list -Datei, die die genauen Repos enthält, als Sicherung in ein temporäres Verzeichnis. Nachdem ich das getan hatte, schlug Sudo apt-get upgrade fehl und ich war nicht in der Lage, es wieder vollständig zum Laufen zu bringen, selbst nachdem ich die genauen Repos wiederhergestellt hatte. Ich habe die Fehlermeldungen nicht bekommen. Da es sich um einen Entwicklungsserver handelt und alle Daten nicht unbedingt erforderlich sind, habe ich mich entschlossen, PostgreSQL neu zu installieren. Dies schlug wiederholt fehl, nachdem mehrere Versuche unternommen wurden, eine benutzerdefinierte Konfiguration auf dem Server zu löschen, von der ich dachte, dass sie stören könnte. Ich kann Sudo apt-get install postgresql-common erfolgreich ausführen, aber wenn ich Sudo apt-get install postgresql-9.5 versuche, schlägt dies mit den folgenden Fehlern fehl:

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

Wenn ich systemctl status [email protected] versuche, erhalte ich:

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

Die Protokolldatei /var/log/postgresql/postgresql-9.5-main.log ist leer, daher bin ich mir nicht sicher, wo ich sonst nach Protokollen suchen soll. Nachdem die Installation fehlgeschlagen ist, gehe ich die Schritte hier durch, um eine vollständige Deinstallation durchzuführen. Ich kann nicht sagen, ob dies ein Problem mit PostgreSQL oder dem aktualisierten Server ist.

UPDATE: Die Ausgabe von 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

Ich hatte das gleiche Problem, Ubuntu 12.04 auf 14.04 aktualisiert. Weiß nicht, aber es funktioniert auch mit systemd. Beim Überprüfen der /etc/init.d/postgresql -Datei wird /usr/share/postgresql-common/init.d-functions verwendet.

Diese Datei führt/usr/bin/pg_ctlcluster aus, um den postgresql-Server zu starten und zu stoppen.

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

/usr/bin/pg_ctlcluster Datei akzeptiert die Option --skip-systemctl-redirect, um postgresql ohne systectl zu starten oder zu stoppen.

Sie müssen also --skip-systemctl-redirect in /usr/share/postgresql-common/init.d-functions in der Funktion do_ctl_all () hinzufügen. Also wird es so aussehen.

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

Oder Sie können $skip_systemctl_redirect = 1; hinzufügen, bevor $skip_systemctl_redirect in /usr/bin/pg_ctlcluster aktiviert wird.

9
Shivaditya

Das gleiche Problem unter Ubuntu wurde von 12.04 auf 14.04 aktualisiert

Behebung durch Hinzufügen der Linie

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

in /usr/share/postgresql-common/init.d-functions danach

init_functions=/lib/lsb/init-functions

in Marionette sieht es so aus

  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

re-Edit: Ubuntu 14.04 verwendet standardmäßig nicht systemd für das Service/Init-Management. Aus irgendeinem Grund verwendet Ihre Installation systemd (wissen Sie warum?), Sollte jedoch upstart mit einem Wrapper für ältere sysV-Startskripten verwenden.

Das Paket postgresql-9.5 enthält keine systemd-Startup-Unit-Datei, sondern ein sysV-Skript, das von upstart problemlos verarbeitet wird (hier gerade getestet).

Möglichkeiten:

  1. Zur Init-Verwaltung zurück zum Start wechseln
  2. Schreiben Sie Ihr eigenes systemd-Startskript für postgresql-9.5

... und mir fehlen die Ideen;)

1
cleary

Nach der Suche kam ich zu diesem Beitrag, weil mein Server mehrere Versionen von Postgresql 9.4, 9.5, 9.6 hat und das gleiche Verhalten hat.

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

Der Versuch, postgresql zu starten, wird weiterhin angezeigt:

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.

Nachdem ich alle Antworten gelesen habe, finde ich die Antwort besser: https://askubuntu.com/a/877472/130195 Aber wenn systemd installiert bleiben soll, der von Ubuntu 14.04 nicht vollständig unterstützt wird, folge diesem Hack.

Aber ich denke, wir brauchen systemd nicht und ich habe die Fähigkeit genutzt, zu wissen, was erforderlich ist, um systemd Version 204 zu installieren. Auf meinem System war upower, ich brauche auch upower nicht. Ich entferne alles, was ich nicht mehr brauche und alle drei Versionen von postgresql funktionieren wieder.

Ich denke, nur ein einfacher Sudo apt-get purge systemd && Sudo apt-get autoremove löst das Problem besser, indem er das Paket systemd entfernt.

WARNUNG: Bitte seien Sie vorsichtig, bevor Sie eine Verpackung entfernen, und achten Sie sehr sorgfältig darauf, was entfernt wird.

1
Rui Andrada