Postgres - nie można utworzyć żadnych gniazd TCP / IP

14

Korzystam z aplikacji railsowej w fazie rozwoju z postgresql 9.3. Kiedy próbowałem dzisiaj uruchomić serwer pasażerski, otrzymałem:

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?

Nic wielkiego, nie myślałem, że to się zdarzyło wcześniej. Ponowne uruchomienie postgres zawsze rozwiązało problem. Więc pobiegłem sudo service postgresql restarti dostałem:

 * 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!

Moje postgresql.confpunkty do wartości domyślnych: localhosti portu 5432. Próbowałem zmienić port, ale komunikat o błędzie jest taki sam (oprócz zmiany portu).

Oba ps aux | grep postgresqli ps aux | grep postmasternic nie zwracają.

EDYTOWAĆ:

W postgresql.confzmieniłem listen_addressesna 127.0.0.1zamiast localhosti udało się, serwer zrestartował się. Musiałem również edytować konfigurację bazy danych moich aplikacji i wskazywać 127.0.0.1zamiast localhost. Jednak pytanie brzmi teraz: dlaczego localhost jest uważany za, 217.74.65.145a nie 127.0.0.1?

To jest moje /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
Jacka
źródło
jakieś wyjście z sudo netstat -anlp | grep 5432?
Flup
1
Jeśli masz zamiar zaciemnić swoje dane, zrób to odpowiedzialnie i użyj example.comjako nazwy domeny.
Jenny D.

Odpowiedzi:

12

Twoje /etc/hostsjest zepsute. Pierwszy wiersz powinien brzmieć

127.0.0.1   localhost something.name.non.example.com company.something.name.non.example.com
Jenny D.
źródło
Uwaga dla przyszłych czytelników, że nawet jeśli zrobić posiada wpisu localhost w /etc/hostsróżne inne czynniki mogą powodować różne odpowiedzi DNS, gdy wyszukiwanie DNS localhostjest rzeczywiście działać. Zobacz stackoverflow.com/a/47824848/5419599 .
Wildcard,
@Wildcard Nie wiem, do którego systemu operacyjnego ta odpowiedź miałaby zastosowanie (jeśli w ogóle). Z pewnością nie ma to większego sensu w systemie Linux.
kasperd
1
@kasperd Przypuszczam, że jeśli masz zamówienie dns fileszamiast files dnsw nsswitch.conf i masz serwer nazw, który rozwiązuje localhost, możesz mieć kłopoty. Ale to wydaje mi się mało prawdopodobne ...
Jenny D
@JennyD Powyższa odpowiedź sugeruje użycie nslookupdo weryfikacji. Ale nslookuppolecenie w Linuksie nie jest używane, nsswitch.confa /etc/hostsprzede wszystkim. A jeśli chodzi dns fileso konfigurację, to brzmi jak proszenie mnie o kłopoty.
kasperd
1
@kasperd zgodził się - byłoby dość wysoko w skali „to-twoja-cholerna wina” ...
Jenny D
0

Rozumiem, że odpowiedź na to pytanie, ale dla tych, którzy nadal mają błąd, przyczyną może być to, że już rozpoczął się jakiś inny proces. Na przykład Homebrewpodczas uruchamiania systemu.

W takim przypadku spróbuj go zatrzymać:
brew services stop postgres

YTerle
źródło