postgresql: Почему я должен указывать -h localhost при запуске psql? - PullRequest
6 голосов
/ 10 сентября 2011

psql mydb выход:

psql: could not connect to server: Permission denied
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

psql -h localhost mydb работает просто отлично.pg_hba.conf выглядит так:

local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust

Как дела?

Ответы [ 5 ]

8 голосов
/ 28 июня 2012

Со мной случилось то же самое, вероятно, из-за противоречивой версии psql (одна от Льва, другая от доморощенного). Хотя я до сих пор не смог понять, как заставить psql использовать каталог сокетов / tmp, у меня есть обходной путь.

Поместите в ваш .bashrc (или .zshrc и т. Д.) Следующее:

export PGHOST=/tmp

Возвращает правильный «хост» в правильный каталог сокетов, без необходимости указывать флаг -h

3 голосов
/ 11 сентября 2011

Возможно, psql и сервер используют другое расположение для сокета unix-домена.(/ var / pgsql_socket / - странное расположение) Это может произойти, если вы смешиваете двоичные файлы из разных пакетов.Попробуйте найти сокет (/ tmp / - хорошее место для начала). Вы можете заставить psql использовать другой каталог, неправильно используя опцию -h:

psql -h /tmp/
2 голосов
/ 29 января 2012

Это случилось со мной в OS X, и проблема была в том, что /usr/bin/psql - это то, что я использовал, но postmaster работал с /Library/PostgreSQL/9.0. Использование /Library/PostgreSQL/9.0/bin/psql (добавив это в мой PATH раньше всех остальных) решило проблему.

2 голосов
/ 10 сентября 2011
1 голос
/ 15 июня 2012

Поскольку другие ответы касались других альтернатив, думаю, я мог бы предоставить что-нибудь о Mac OS X Server на Lion. Я столкнулся с очень похожей проблемой - в моем случае даже -h localhost не работал, так как в PostregSQL было отключено сетевое взаимодействие, что, кстати, во многих случаях является очень хорошей идеей. Что касается Mac OS X Server, то он запускает сервер PostgreSQL через launchd.

Некоторые подсказки при ходьбе:

  • serveradmin услуга: postgres
  • launchd файл конфигурации: /System/Library/LaunchDaemons/org.postgresql.postgres.plist
  • папка базы данных: /var/pgsql
  • папка сокета: /var/pgsql_socket

Этот файл конфигурации переопределяет несколько директив конфигурации, которые можно найти в postgresql.conf в папке базы данных. Особенно эти двое:

  • unix_socket_group
  • unix_socket_permissions

Вы можете обнаружить, что для запуска сервера используется учетная запись _postgres, и все также доступно, если активный пользователь является членом группы _postgres.

Запустив dscl . -read /Groups/_postgres GroupMembership, вы увидите, что по умолчанию в этой группе есть следующие члены: _devicemgr _calendar _teamsserver _www

Полагаю, у вас есть два варианта. Добавьте себя в группу _postgres или измените файл конфигурации launchd. Последнее - это просто редактирование простого текста ... Но остерегайтесь безопасности, потому что таким образом вы будете открывать Сервер для того, что соответствует критериям, которые вы изменили (см. Последний абзац).

Первое можно сделать либо с помощью Server.app, либо с помощью dscl утилиты командной строки. Первый вариант, вероятно, не нужно ничего добавлять. Просто убедитесь, что вы видите системные учетные записи (Просмотр -> Скрыть / Показать системные учетные записи). Я вроде наркомана из CLI, так что это должно добавить вашего пользователя в группу _postgres:

sudo dscl . -append /Groups/_postgres GroupMembership $USER

Конечно, вы должны быть осторожны, когда работаете под своей учетной записью, потому что вы предоставляете доступ к своей базе данных Mac OS X Server. Так что либо защитите свою учетную запись _postgres, либо создайте отдельного пользователя для управления вашей базой данных, либо не сохраняйте ничего личного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...