Postgres - konnte keine TCP / IP-Sockets erstellen


14

Ich verwende eine Rails-App in der Entwicklung mit postgresql 9.3. Als ich heute versuchte, den Passagierserver zu starten, bekam ich:

PG::ConnectionBad - could not connect to server: Connection refused
    Is the server running on host "localhost" (217.74.65.145) and accepting
    TCP/IP connections on port 5432?

Keine große Sache, dachte ich, das ist schon mal passiert. Ein Neustart von postgres hat das Problem immer gelöst. Also rannte ich sudo service postgresql restartund bekam:

 * Restarting PostgreSQL 9.3 database server
 * The PostgreSQL server failed to start. Please check the log output:
2014-06-11 10:32:41 CEST LOG:  could not bind IPv4 socket: Cannot assign requested address
2014-06-11 10:32:41 CEST HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2014-06-11 10:32:41 CEST WARNING:  could not create listen socket for "localhost"
2014-06-11 10:32:41 CEST FATAL:  could not create any TCP/IP sockets
...fail!

Meine postgresql.confPunkte zu den Vorgaben: localhostund Port 5432. Ich habe versucht, den Port zu ändern, aber die Fehlermeldung ist dieselbe (mit Ausnahme der Portänderung).

Beides ps aux | grep postgresqlund ps aux | grep postmasternichts zurück.

BEARBEITEN:

In postgresql.confich geändert , listen_addressesum 127.0.0.1statt localhostund es hat den Trick, Server neu gestartet. Ich musste auch die db-Konfiguration meiner Anwendungen bearbeiten und 127.0.0.1stattdessen auf zeigen localhost. Die Frage ist nun jedoch, warum localhost als solche angesehen wird 217.74.65.145und nicht 127.0.0.1.

Das ist mein /etc/hosts:

127.0.0.1   local
127.0.1.1   jacek-X501A1
127.0.0.1   something.name.non.example.com
127.0.0.1   company.something.name.non.example.com

irgendeine Ausgabe von sudo netstat -anlp | grep 5432?
Flup

1
Wenn Sie Ihre Daten verschleiern möchten, gehen Sie bitte verantwortungsbewusst vor und verwenden Sie diese example.comals Domainnamen.
Jenny D

Antworten:


12

Du /etc/hostsbist kaputt. Die erste Zeile sollte lauten

127.0.0.1   localhost something.name.non.example.com company.something.name.non.example.com

Hinweis für zukünftige Leser , dass , auch wenn Sie tun einen Eintrag localhost haben in /etc/hostsverschiedenen anderen Faktoren eine andere DNS - Antwort führen können , wenn eine DNS - Lookup von localhosttatsächlich ausgeführt werden . Siehe stackoverflow.com/a/47824848/5419599 .
Wildcard

@Wildcard Ich weiß nicht, auf welches Betriebssystem diese Antwort zutreffen würde (falls vorhanden). Unter Linux macht das sicher nicht viel Sinn.
Kasperd

1
@kasperd Ich nehme an, wenn Sie die Bestellung dns filesstatt files dnsin der Datei nsswitch.conf haben und einen Nameserver haben, der localhost auflöst, könnten Sie Probleme bekommen. Aber das klingt für mich höchst unwahrscheinlich ...
Jenny D

@JennyD Die oben verlinkte Antwort schlägt vor, nslookupzur Bestätigung zu verwenden. Aber der nslookupBefehl auf Linux nicht verwendet nsswitch.confund /etc/hostsan erster Stelle. Und was dns filesdie Konfiguration angeht, klingt das so, als würde ich nach Ärger fragen.
Kasperd

1
@kasperd Einverstanden - es wäre ziemlich hoch auf der Skala "Es ist-deine-eigene-verdammte-Schuld" ...
Jenny D

0

Ich verstehe, dass diese Frage beantwortet ist, aber für diejenigen, die immer noch den Fehler haben, könnte der Grund sein, dass ein anderer Prozess bereits damit begonnen hat. Zum Beispiel Homebrewbeim Systemstart.

Wenn dies der Fall ist, versuchen Sie es zu stoppen:
brew services stop postgres

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.