[Ubuntu 16.04] Ich habe postgresql 9.5 zusammen mit Abhängigkeiten installiert:
sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-common
sudo apt-get install postgresql-9.5 libpq-dev
Wenn ich rennen will psql
bekomme ich:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Aber /var/run/postgresql/
aber leer. Wenn ich posgresql neu starte, scheint alles in Ordnung zu sein:
$ /etc/init.d/postgresql restart
[ ok ] Restarting postgresql (via systemctl): postgresql.service.
$ /etc/init.d/postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since wto 2016-09-27 16:18:26 CEST; 1min 15s ago
Process: 3076 ExecReload=/bin/true (code=exited, status=0/SUCCESS)
Process: 3523 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 3523 (code=exited, status=0/SUCCESS)
aber wenn ps aux
es keine solche PID gibt (warum ??)
Totale Reinstalation hilft überhaupt nicht. Wie kann ich es reparieren?
postgresql
mike927
quelle
quelle
Antworten:
Dies ist eine Besonderheit der Systemintegration von PostgreSQL in Xenial.
Die vom postgresql-common-Paket installierte postgresql-Service-Unit ist lediglich ein Dummy-Service, der dazu führt, dass der eigentliche Service [email protected] über eine Abhängigkeit gestartet wird. Sie können diese Abhängigkeit anzeigen, indem Sie den Befehl ausführen
Diese Abhängigkeit ist nicht permanent, sondern wird während des Systemstarts vom systemd-Generator generiert,
/lib/systemd/system-generators/postgresql-generator
der auch mit dem Paket postgresql-common geliefert wird. Der Generator prüft, ob der Startmodus in der Datei auf gesetzt/etc/postgresql/9.6/main/start.conf
istauto
, und richtet in diesem Fall die Abhängigkeit ein, die anschließend den Start der Instanz 9.6-main bewirkt.(Genauer gesagt, es werden alle Konfigurationsunterverzeichnisse überprüft
/etc/postgresql/*/*
und Abhängigkeiten für alle Instanzen erstellt, die für den automatischen Start konfiguriert sind. In einer Standardinstallation wird jedoch nur eine Instanz vorhanden sein.)Aufgrund der Einschränkungen von Systemd-Generatoren (siehe
man systemd.generator
) kann dieser Prozess fehlschlagen und dazu führen, dass die Abhängigkeiten nach einem Neustart nicht mehr vorhanden sind. Systemd startet dann nur den Dummy-Dienst und schreibtzum log aber sonst nichts machen. Versuch, den Dienst manuell über zu starten
reproduziert nur dieses Ergebnis. Befehl ausführen
manuell als root wird der Generator neu gestartet und in den meisten Fällen das Problem bis zum nächsten Neustart behoben.
Um das Problem dauerhaft zu lösen, müssen Sie den Grund finden, warum der Generator während des Startvorgangs ausfällt. Mögliche Ursachen finden Sie in der Manpage systemd.generator. In meinem Fall war es die PostgreSQL-Konfigurationsdatei,
/etc/postgresql/9.6/main/postgresql.conf
die mit einem anderen Dateisystem verknüpft war, das noch nicht verfügbar war, als der Generator zu Beginn des Startvorgangs ausgeführt wurde.postgresql-generator
Überprüft das Vorhandensein dieser Datei, auch wenn sie ansonsten nicht benötigt wird.quelle
Erweitere die Antwort von Tilman, aber nicht genug Kudos, um einen Kommentar abzugeben ...
Wenn Sie nicht benötigen, dass der Dienst postgresql heißt, und sich nicht für den Wrapper-Dummy-Dienst interessieren, sollte dies nur funktionieren, um den tatsächlichen Dienst direkt zu steuern. Der Name lautet: postgresql@$version-$cluster.service In Ihrem Fall sollte es kurz postgresql-9.5-main sein . Beginnen Sie gerne
und aufhören:
Der Status gibt Ihnen auch viel bessere und genauere Informationen als über den automatisch generierten Wrapper-Service.
Für 9.6 sieht es so aus:
quelle
In meinem Fall handelte es sich um falsch konfigurierte Gebietsschemas.
Ich habe die Lösung in dieser Antwort von dba.stackexchange.com gefunden :
sudo dpkg-reconfigure locales
diese Option , um die erforderlichen Gebietsschemas zu generierensudo pg_dropcluster 9.5 main
Löschen Sie den vorhandenen Datenbankcluster über (dadurch werden alle Daten im Cluster gelöscht!).sudo pg_createcluster 9.5 main --start
sudo service postgresql restart
quelle
Es wäre besser, systemd-Startskripte mit Ubuntu 16.04 zu verwenden, da init-Skripte heutzutage möglicherweise nicht richtig funktionieren. Postgres 9.5 ist bereits in den Ubuntu-Repos, versuchen Sie also, stattdessen das System zu starten.
quelle
Ein anderes "wurde von diesem gebissen".
Die
pg_upgradecluster
aktuell verlassene Zielversion (9.6) im "manuellen" Modus auf Port 5433 und die Quellversion (9.5) auf Port 5432.Auch danach
pg_dropcluster 9.5
. Das Bearbeiten der Datei start.conf hat nicht geholfen, aber der Hinweis war zu verwendensystemctl daemon-reload
, da der Generator basierend auf dieser Konfigurationsdatei entscheidet, ob die Servicedatei symbolisch verknüpft werden soll:Wenn der Cluster, den Sie starten möchten, in der Datei start.conf nicht das Wort "auto" enthält, müssen Sie ein System-Reload (oder einen Neustart) durchführen, damit er beim Start aktiviert wird.
Müssen dies noch mit einem Neustart überprüfen, aber angesichts der oben genannten recht zuversichtlich, dass das Problem war.
quelle
Ich habe den magischen "Super Service" wie folgt deaktiviert:
Dann habe ich den konkreten Service aktiviert:
Nach dem Neustart hat alles wieder funktioniert.
quelle
Hatte den gleichen Fehler, verschwendete Stunden, einfache Lösung. Überprüfen Sie diese SO Frage und meine Antwort, die ist:
quelle
Ich hatte dieses Problem aus einem anderen Grund: Verzeichnisberechtigungen. Ich hatte einen vollwertigen Chmod wie diesen:
Dadurch wird das Verzeichnis als nicht ausführbar festgelegt, sodass Postgres es nicht lesen können.
quelle
Ich hatte das gleiche Problem beim Überprüfen des gefundenen Problems mit der Berechtigung ssl-cert-snakeoil.key.
Eigentümer festlegen
chown root: ssl-cert ssl-cert-snakeoil.key chmod 640 ssl-cert-snakeoil.key
und machte einen sauberen Neustart.
quelle