Postgres - impossible de créer des sockets TCP / IP

14

J'exécute une application rails en développement avec postgresql 9.3. Quand j'ai essayé de démarrer le serveur de passagers aujourd'hui, j'ai eu:

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?

Pas grand-chose que je pensais, c'est arrivé avant. Le redémarrage de postgres a toujours résolu le problème. J'ai donc couru sudo service postgresql restartet obtenu:

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

Mes postgresql.confpoints sur les valeurs par défaut: localhostet le port 5432. J'ai essayé de changer le port mais le message d'erreur est le même (sauf le changement de port).

Les deux ps aux | grep postgresqlet ps aux | grep postmasterne retournent rien.

ÉDITER:

En postgresql.confj'ai changé en listen_addressesau 127.0.0.1lieu de localhostet ça a fait l'affaire, le serveur a redémarré. J'ai également dû modifier la configuration db de mes applications et pointer vers 127.0.0.1au lieu de localhost. Cependant, la question est maintenant, pourquoi est considéré comme localhost 217.74.65.145et non 127.0.0.1?

Voilà mon /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
la source
toute sortie de sudo netstat -anlp | grep 5432?
Flup
1
Si vous allez masquer vos données, veuillez le faire de manière responsable et utiliser example.comcomme nom de domaine.
Jenny D

Réponses:

12

Votre /etc/hostsest cassé. La première ligne doit se lire

127.0.0.1   localhost something.name.non.example.com company.something.name.non.example.com
Jenny D
la source
Note pour les futurs lecteurs que même si vous n'avez une entrée localhost dans , divers autres facteurs peuvent causer une autre réponse DNS lorsqu'une recherche DNS est réellement exécuté. Voir stackoverflow.com/a/47824848/5419599 . /etc/hostslocalhost
Wildcard
@Wildcard Je ne sais pas à quel OS cette réponse serait applicable (le cas échéant). Cela n'a certainement pas beaucoup de sens sous Linux.
kasperd
1
@kasperd Je suppose que si vous avez la commande dns filesau lieu de files dnsdans nsswitch.conf et que vous avez un serveur de noms qui résout localhost, vous pourriez avoir des ennuis. Mais cela me semble très improbable ...
Jenny D
@JennyD La réponse liée ci-dessus suggère d'utiliser nslookuppour vérifier. Mais la nslookupcommande sur Linux n'utilise pas nsswitch.confet /etc/hostsen premier lieu. Et quant à la mise dns filesen configuration, cela ressemble à me demander des ennuis.
kasperd
1
@kasperd D'accord - ce serait assez élevé sur l'échelle "c'est-à-toi-même-maudite-faute" ...
Jenny D
0

Je comprends qu'il est répondu à cette question, mais pour ceux qui ont encore l'erreur, la raison pourrait être qu'un autre processus a déjà commencé. Par exemple Homebrewau démarrage du système.

Si tel est le cas, essayez de l'arrêter:
brew services stop postgres

YTerle
la source