Не удается подключиться к локальному PostgreSQL - PullRequest
124 голосов
/ 11 декабря 2011

Мне удалось создать локальную среду разработки.

Все мои локальные Rails-приложения теперь выдают ошибку:

PGError
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"?

Я понятия не имею, что вызвало это.

При поиске решения я обновил все связанные гемы, обновил системные гемы, обновил MacPorts.Никакой радости.

Другие сообщали об этой проблеме при обновлении с OSX Leopard до Lion из-за путаницы в том, какую версию Postgres следует использовать (то есть версию OSX или версию MacPorts).Я управляю Lion уже несколько месяцев, поэтому кажется странным, что это должно произойти сейчас.

Я не хочу слишком много возиться, не понимая, в чем проблема.Как я могу отладить это методически?

Как определить, сколько версий PostgreSQL в моей системе, к какой из них обращаются и где она находится?Как это исправить, если используется неправильный PostgreSQL?

Извините за вопросы по noob.Я все еще учусь, как это работает!Спасибо за любые ссылки.

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

Некоторые обновления, основанные на предложениях и комментариях ниже.

Я попытался запустить pg_lsclusters, который возвратил ошибку command not found.

Затем я попытался локализовать свой файл pg_hba.conf и нашел следующие три примера файлов:

/opt/local/share/postgresql84/pg_hba.conf.sample
/opt/local/var/macports/software/postgresql84/8.4.7_0/opt/local/share/postgresql84/pg_hba.conf.sample
/usr/share/postgresql/pg_hba.conf.sample

Итак, я предполагаю, что установлены 3 версии PSQL?Macports, OSX по умолчанию и ???

Затем я выполнил поиск сценария запуска launchctl ps -ef | grep postgres, который возвратил

0    56     1   0 11:41AM ??         0:00.02 /opt/local/bin/daemondo --label=postgresql84-server --start-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper start ; --stop-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper stop ; --restart-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper restart ; --pid=none
  500   372     1   0 11:42AM ??         0:00.17 /opt/local/lib/postgresql84/bin/postgres -D /opt/local/var/db/postgresql84/defaultdb
  500   766   372   0 11:43AM ??         0:00.37 postgres: writer process                                                                                                                                                                                                                                                                                                                   
  500   767   372   0 11:43AM ??         0:00.24 postgres: wal writer process                                                                                                                                                                                                                                                                                                               
  500   768   372   0 11:43AM ??         0:00.16 postgres: autovacuum launcher process                                                                                                                                                                                                                                                                                                      
  500   769   372   0 11:43AM ??         0:00.08 postgres: stats collector process                                                                                                                                                                                                                                                                                                          
  501  4497  1016   0 12:36PM ttys000    0:00.00 grep postgres

Я разместил содержимое postgresql84-server.wrapper в http://pastebin.com/Gj5TpP62.

Я пытался запустить port load postgresql184-server, но получил ошибку Error: Port postgresql184-server not found.

Я все еще очень запутался, как это исправить, и ценю любые указатели "для чайников".

Спасибо!

EDIT2

Эта проблема началась после того, как у меня возникли проблемы с daemondo.Мои локальные приложения на Rails терпели крах с ошибкой приложения по типу «gem daemondo не может быть найден».Затем я попытался найти серию обновлений комплектов, обновлений гемов, обновлений портов и обновлений brew.

Может ли эта ошибка быть проблемой с daemondo?

Ответы [ 21 ]

66 голосов
/ 13 декабря 2011

Это действительно похоже на ошибку прав доступа к файлу.Доменные сокеты Unix являются файлами и имеют пользовательские права, как и любые другие.Похоже, что пользователь OSX, пытающийся получить доступ к базе данных, не имеет прав доступа к файлу сокета.Чтобы подтвердить это, я провел несколько тестов в Ubuntu и psql, чтобы попытаться сгенерировать одну и ту же ошибку (см. Ниже).

Вам необходимо проверить разрешения для файла сокета и его каталогов /var и * 1004.*.Ваше приложение Rails (пользователь OSX) должно иметь разрешения на выполнение (x) для этих каталогов (желательно, чтобы все имели разрешения), а сокет должен иметь полные разрешения (wrx).Вы можете использовать ls -lAd <file>, чтобы проверить их, и если какая-либо из них является символической ссылкой, вам нужно проверить файл или dir, на который указывает ссылка.

Вы можете изменить разрешения для dir для себя, но сокет настраивается postgres в postgresql.conf.Его можно найти в том же каталоге, что и pg_hba.conf (вам нужно выяснить, какой именно).После того, как вы установите разрешения, вам нужно будет перезапустить postgresql.

# postgresql.conf should contain...
unix_socket_directory = '/var/run/postgresql'       # dont worry if yours is different
#unix_socket_group = ''                             # default is fine here
#unix_socket_permissions = 0777                     # check this one and uncomment if necessary.

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

Я сделал быстрый поиск в Google, которыйВозможно, вы захотите посмотреть, является ли это релевантным.Это может привести к любой попытке find вашего файла конфигурации.

http://www.postgresqlformac.com/server/howto_edit_postgresql_confi.html


Сообщения об ошибках:

Пользовательв pg_hba.conf не найденпрослушивание.

psql: could not connect to server: Connection refused
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Неверные права доступа к файлу сокета unix :

psql: could not connect to server: Permission denied
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
41 голосов
/ 13 декабря 2011

У меня такое ощущение, что это (опять же) вещь Mac / OSX: внешний и внутренний интерфейсы занимают другое место для сокета домена unix (который функционирует как точка rendezvous ).).

Контрольный список:

  • Работает ли postgres: ps aux | grep postgres | grep -v grep должен выполнить трюк
  • Где находится сокет: find / -name .s.PGSQL.5432 -ls (сокет, используемый длябыть в / tmp; вы можете начать искать там)
  • , даже если вы найдете сокет (unix-domain), клиент может использовать другое местоположение.(это происходит, если вы смешиваете дистрибутивы или если у вас есть дистрибутив, установленный где-то, и другой (например, из источника), установленный в другом месте), когда клиент и сервер используют разные адреса rendez-vous .

Если postgres работает, и сокет действительно существует, вы можете использовать:

  • psql -h /the/directory/where/the/socket/was/found mydbname

(который пытается подключиться к unix-домену)розетка)

;Теперь вы должны получить приглашение psql: попробуйте \d, а затем \q, чтобы выйти.Вы также можете попробовать:

  • psql -h localhost mydbname.

(который пытается подключиться к localhost (127.0.0.1)

Если эти попытки не удаются, потому чтос недостаточной авторизацией вы можете изменить pg_hba.conf (и SIGHUP или перезапустить). В этом случае также проверьте журналы.

Аналогичный вопрос: Не удалось запустить Postgres

Примечание. Если вы можете получить приглашение psql, быстрое решение этой проблемы - просто изменить config/database.yml, добавив:

host: localhost

или вы можете попробоватьдобавление:

host: /the/directory/where/the/socket/was/found

В моем случае host: /tmp

26 голосов
/ 30 декабря 2011

Попробуйте удалить pg gem (gem uninstall pg), а затем переустановить - если вы используете bundler, тогда bundle install, иначе gem install pg. Кроме того, убедитесь, что путь выбирает правильную версию: у Lion есть версия posgresql (предыдущих версий этого не было), и он может находиться в пути до вашей локальной версии (например, MacPorts, homebrew).

В моем случае: установка homegrew postgresql, обновление postgresql, rails и т. Д., А затем возникла эта ошибка. Удаление и переустановка pg gem сделали это для меня.

20 голосов
/ 14 мая 2012

Местоположение файла сокета запекается в гем во время компиляции.Таким образом, вам нужно перестроить ваш pg gem.

gem pristine pg
# or
bundle exec gem pristine pg

Это должно решить эту конкретную проблему.

16 голосов
/ 14 января 2013

Если вы получаете похожую ошибку:

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"?

Это может сработать (для меня):

initdb /usr/local/var/postgres -E utf8

Указанный каталог должен отличаться, если вы не используете OSX / Brew.

Примечание. Это не точное сообщение об ошибке, показанное выше, но этот поток является первым результатом этого сообщения об ошибке.

8 голосов
/ 27 ноября 2012

что решило эту ошибку для меня, так это удаление файла с именем postmaster.pid в каталоге postgres.пожалуйста, посмотрите мой вопрос / ответ, используя следующую ссылку для пошаговых инструкций.моя проблема не была связана с правами доступа к файлу:

psql: не удалось подключиться к серверу: нет такого файла или каталога (Mac OS X)

людей, отвечающих на этот вопросупал много игры, хотя, спасибо за это!я проголосовал за все, что мог

7 голосов
/ 23 апреля 2012

Вот как я решил это сообщение об ошибке, частично основываясь на ответе wildplasser.

find / -name .s.PGSQL.5432 -ls 2> /dev/null
  => ... /tmp/.s.PGSQL.5432

Итак, есть мой сокет или что-то еще, но клиент ищет его по адресу:

/var/run/postgresql/.s.PGSQL.5432

Так что достаточно просто сделать символическую ссылку на /tmp/.s.PGSQL.5432:

sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

Надеюсь, это кому-нибудь поможет. Кажется, что-то не так, но эй, это работает!

6 голосов
/ 13 сентября 2014

Я начал получать это после обновления до нового postgres - я не осознавал, что у меня есть файлы данных.

Сначала я попытался запустить сервер postgres:

postgres -D /usr/local/var/postgres

, как я увидел эту ошибку

FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.0, which is not compatible with this version 9.3.5.

Итак, я нашел этот ответ на SO, связанной ск ошибке несовместимости: https://serverfault.com/questions/342626/how-do-i-upgrade-postgresl-database-incompatibility-error

Вот что это исправило

mv /usr/local/var/postgres /usr/local/var/postgres.old
initdb -D /usr/local/var/postgres
4 голосов
/ 12 марта 2013

Просто подтверждая, что у меня была похожая проблема на PSQL и Django,

Похоже, что мой psql-сервер не был корректно выключен, а файл postmaster.pid все еще присутствовал (должен быть автоматически удален при правильном завершении работы)в моей папке postgres.

Удалил это и все хорошо

4 голосов
/ 09 мая 2015

Я получаю эту же ошибку (оказывается, это была ошибка с postmaster.pid. Вот как я запустил и снова запустил postgres ( кредит Рикардо Бурильо за исправление ):

$ rm /usr/local/var/postgres/postmaster.pid 
$ pg_resetxlog -f /usr/local/var/postgres
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...