Подтвердить что ты не робот

Проблема с выпуском Mountain Lion в PostgreSQL

Я пытаюсь настроить PostgreSQL в своей системе (OSX 10.8, чистая установка), но у меня возникают проблемы с использованием psql, createdb и т.д. Я пробовал различные решения и ни один похоже, работают.

Установка прошла успешно, и я решил исправить проблему с известными сокетами, используя следующее:

mkdir /var/pgsql_socket 
sudo chown $USER /var/pgsql_socket

Затем я отредактировал postgresql.conf, установил unix_socket_directory в

unix_socket_directory = '/var/pgsql_socket'

и перезапустил Pg.

Это должно было устранить проблему сокета, но я все равно получаю:

psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Кроме того, я проверил состояние сервера и, похоже, работает, но я все равно получаю "нет такого файла или каталога"

Любые идеи?

4b9b3361

Ответ 1

В соответствии с сообщением об ошибке команда psql, которая появляется первым в $PATH, имеет /tmp в качестве жестко заданного каталога сокетов unix по умолчанию.

Так как фактический каталог фактически /var/pgsql_socket, вы должны указать его явно, а не полагаться на значение по умолчанию:

$ psql -h /var/pgsql_socket [other options]

То же самое относится к другим командам на стороне клиента, таким как createdb, dropdb, createuser...

Если вы не хотите указывать -h каждый раз, его можно поместить в переменную среды PGHOST.

Некоторые люди также решают это, используя TCP-соединения с localhost, а не используя каталог сокетов Unix.

Основной причиной этой проблемы является то, что после установки PostgreSQL в Mac OS X система заканчивается наличием двух разных экземпляров клиента postgres (библиотека libpq, psql и других связанных с ним утилит), одна который поставляется вместе с MacOS, а другой - с установщиком PostgreSQL.

Поэтому еще один способ - изменить ваш $PATH так, чтобы psql, установленный с PostgreSQL, был выбран до того, который был установлен с системой (предположительно /usr/bin/psql).

Ответ 2

У меня была такая же проблема, и после того, как вы сделали то, что вы сделали, мне также пришлось изменить свой путь, чтобы /usr/local/bin (где Homebrew ставит все) доходит до /usr/bin. Я не знаю, почему это больше не по умолчанию, но легко изменить.

sudo vi /etc/paths

затем отредактируйте файл, чтобы строка /usr/local/bin была сверху.

Или, если вы просто хотите, чтобы это изменение произошло для вашей учетной записи пользователя, отредактируйте файл ~/.bash_profile:

touch ~/.bash_profile
vi ~/.bash_profile

и добавьте эту строку: export PATH="/usr/local/bin:$PATH"

затем запустите source ~/.bash_profile, чтобы изменения вступили в силу.

Ответ 3

Я столкнулся с этой же проблемой при установке PostgreSQL 9.2 через Homebrew. psql, который поставляется с этой сборкой, выглядит /tmp для сокета при вызове без каких-либо параметров.

Мне не хотелось добавлять новые переменные среды, такие как PGHOST, или создавать псевдонимы для psql. Нет ничего плохого в том, чтобы делать что-либо из этого, но мне просто не хотелось добавлять в беспорядок моей среды.

Итак, почему бы не просто установить unix_socket_directory в postgresql.conf на /tmp? Я сделал:

unix_socket_directory = '/tmp'      # (change requires restart)
#unix_socket_group = ''             # (change requires restart)
#unix_socket_permissions = 0777     # begin with 0 to use octal notation

После перезагрузки я могу просто запустить $ psql без опции -h, не добавляя переменную псевдонима или среды.