Проблема с выпуском 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"?
Кроме того, я проверил состояние сервера и, похоже, работает, но я все равно получаю "нет такого файла или каталога"
Любые идеи?
Ответы
Ответ 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
, не добавляя переменную псевдонима или среды.
Ответ 4
См. принятый ответ для вопроса/ссылки ниже. Работал для меня, но обратите внимание, что параметр для изменения - unix_socket_directories (множественное число), а не unix_socket_directory, как указано.
https://dba.stackexchange.com/info/21587/postgresql-is-running-locally-but-i-cannot-connect-why