PostgreSQL не смог создать какие-либо сокеты TCP/IP Mavericks

Я устанавливаю через brew.

Сообщение об ошибке:

Когда я звоню

postgres

Я получаю сообщение об ошибке

LOG:  could not bind IPv6 socket: Address already in use
HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
LOG:  could not bind IPv4 socket: Address already in use
HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and  retry.
LOG:  could not bind IPv6 socket: Address already in use
HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
WARNING:  could not create listen socket for "localhost"
FATAL:  could not create any TCP/IP sockets

Запуск

postgres -D /usr/local/var/postgres

Создает ту же ошибку

createdb

дважды запрашивает мой пароль, затем говорит:

createdb: could not connect to database template1: FATAL:  password authentication failed for user "thomasmurphy"

Что я пробовал * Удаление и переустановка pg gem, удаление и переустановка postgres * Обновление инструментов командной строки * Удовлетворение всех потребностей врача brew * редактирование прав pg_hba.conf * Редактирование .bash_profile, чтобы быть уверенным, что оно включает указанные выше каталоги

У меня есть Postgres, отлично работающий на моем рабочем компьютере, также на Mavericks, поэтому это кажется мне чем-то вроде края. Какие другие векторы я могу сделать, чтобы попытаться решить эту проблему?

Ответ 1

Ошибки, которые вы получаете, связаны с тем, что PostgreSQL работает. Откуда мне знать? Потому что он отклоняет ваш пароль. Это довольно ясно.

Теперь ваша реальная проблема, вероятно, в том, что вам необходимо перезапустить PostgreSQL после изменения pg_hba.conf, чтобы предоставить вам доверительный доступ. Затем вы можете:

 ALTER USER foo WITH PASSWORD 'bar';

С точки зрения запуска и перезапуска PostgreSQL, смотрите этот вопрос: Как запустить сервер PostgreSQL в Mac OS X?

Ответ 2

Ошибка, которую вы получили, потому что ваш хост сломан. Проверьте файл /etc/hosts.

Поместите 127.0.0.1 localhost в первую строку хостов.

Ответ 3

Linux. Убедитесь, что интерфейс loopback запущен, запустив ifconfig в командной строке. Если он не вставлен, вы можете использовать /sbin/ifconfig lo 127.0.0.1 , чтобы поднять его.

Ответ 4

Возможно, что ваш /etc/hosts не работает. Это может быть что-то еще нарушение DNS-поиска localhost, даже если правильная строка находится в /etc/hosts.

Проверьте nslookup localhost и посмотрите, получится ли в результате 127.0.0.1. Также проверьте с помощью getent hosts localhost. Проверьте их также как пользователь Postgres работает как.

Ответ 5

Есть несколько сценариев и мест для проверки в этом случае. Потерял один раз из-за этого. Обычный файл по умолчанию hosts должен выглядеть примерно так:

[[email protected] ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

Чтобы подтвердить, что localhost может разрешить проблему, протестируйте, используя ping:

[[email protected] ~]# ping localhost

Проверьте cat /etc/nsswitch.conf|grep hosts и подтвердите, что files есть:

#     hosts: files dns
#     hosts: files dns  # from user file
#hosts:     db files nisplus nis dns
hosts:     files mdns4_minimal [NOTFOUND=return] dns myhostname

Проверьте права доступа к файлу /etc/hosts, он должен быть 644 (доступен для чтения всем процессам/пользователям):

[[email protected] ~]# ls -al /etc/hosts
-rw-r--r--. 1 root root 240 Aug 14 08:04 /etc/hosts

Для тех, у кого достаточно времени, я создал подробный пост в блоге здесь: https://coffeewithbytes.com/blog/postgres-hostsfile-permissions/

Я упомянул, как я проверил и пришел к выводу.