Postgres - не удалось создать сокеты TCP / IP


14

Я запускаю приложение rails в разработке с postgresql 9.3. Когда я попытался запустить пассажирский сервер сегодня, я получил:

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?

Ничего страшного, я думал, что случилось раньше. Перезапуск postgres всегда решал проблему. Итак, я побежал sudo service postgresql restartи получил:

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

Мои postgresql.confочки по умолчанию: localhostи порт 5432. Я попытался изменить порт, но сообщение об ошибке то же самое (за исключением изменения порта).

Оба ps aux | grep postgresqlи ps aux | grep postmasterничего не возвращают.

РЕДАКТИРОВАТЬ:

В postgresql.confя изменил listen_addressesк 127.0.0.1а localhostи сделал трюк, сервер перезагружен. Я также должен был отредактировать конфигурацию базы данных моих приложений и указать 127.0.0.1вместо localhost. Однако теперь возникает вопрос, почему localhost считается, 217.74.65.145а не 127.0.0.1?

Это мое /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

любой выход из sudo netstat -anlp | grep 5432?
Флюп

1
Если вы собираетесь запутать свои данные, сделайте это ответственно и используйте в example.comкачестве имени домена.
Дженни Д

Ответы:


12

Ваш /etc/hostsсломан. Первая строка должна читать

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

Примечание для читателей в будущем , что даже если вы делаете есть запись LOCALHOST в /etc/hostsразличные другие факторы могут привести к другой ответ DNS , когда DNS поиск в localhostдействительности выполняются. См. Stackoverflow.com/a/47824848/5419599 .
Wildcard

@ Wildcard Я не знаю, к какой ОС этот ответ будет применяться (если есть). Это определенно не имеет особого смысла в Linux.
Касперд

1
@kasperd Полагаю, если у вас есть порядок dns filesвместо files dnsnsswitch.conf и у вас есть сервер имен, который разрешает localhost, вы можете столкнуться с проблемами. Но это звучит крайне маловероятно для меня ...
Дженни Д

@JennyD Ответ, указанный выше, предлагает использовать nslookupдля проверки. Но nslookupкоманда на Linux не использует nsswitch.confи /etc/hostsв первую очередь. А что касается установки dns filesконфигурации, это звучит как вызов мне неприятностей.
kasperd

1
@kasperd Согласен - это было бы довольно высоко в шкале "это твоя собственная
Дженни Д

0

Я понимаю, что на этот вопрос ответили, но для тех, у кого все еще есть ошибка, причина могла бы быть в том, что какой-то другой процесс уже запустил ее. Например, Homebrewпри загрузке системы.

Если это так, попробуйте остановить это:
brew services stop postgres

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.