Не удается подключиться к локальному PostgreSQL

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

Все мои локальные 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?

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

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

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

Я пытался бежать 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 ответ

Решение

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

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

Вы можете изменить разрешения для 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: FATAL:  no pg_hba.conf entry for host "[local]", user "couling", database "main", SSL off

Пользователь не прошел аутентификацию пароля:

psql: FATAL:  password authentication failed for user "couling"

Отсутствует файл сокета Unix:

psql: could not connect to server: No such file or directory
    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: 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"?

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

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

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

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

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

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

; Теперь вы должны получить приглашение psql: try \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

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

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

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

gem pristine pg
# or
bundle exec gem pristine 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"?

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

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

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

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

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

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

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

Вот как я решил это сообщение об ошибке, частично основываясь на ответе 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

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

Я начал получать это после обновления до нового 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

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

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

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

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

$ rm /usr/local/var/postgres/postmaster.pid 
$ pg_resetxlog -f /usr/local/var/postgres

Я прочитал много тем об этой ошибке, и я решил просто перезапустить postgres:

sudo service postgresql restart

Который здесь не упоминается.

У меня была похожая проблема при попытке использовать postgresql с рельсами. Обновление моего Gemfile для использования новой версии gem pg решит эту проблему для меня. (работает gem pg версия 0.16.0). В Gemfile используйте:

gem 'pg', '0.16.0'

затем выполните следующую команду, чтобы обновить гем

bundle install --without production
bundle update
bundle install
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"?

Я некоторое время искал решение. Итак, этот вопрос также решил проблему для меня (reinit db):

rm -r /usr/local/var/postgres  
initdb /usr/local/var/postgres -E utf8  
pg_ctl -D /usr/local/var/postgres -l logfile start

Я использую OS X 10.11.3 с варкой.

Это случилось со мной сегодня после того, как умерла батарея моего Macbook. Я думаю, что это может быть вызвано неправильным отключением. Все, что вам нужно сделать в таких случаях, как мой, это удалить postmaster.pid

Перейдите в папку

cd /usr/local/var/postgres

Проверьте, присутствует ли postmaster.pid

ls

Удалить postmaster.pid

rm postmaster.pid

В моем случае ни одно из предыдущих решений не было хорошим. Вместо использования сокета вы можете использовать TCP host + port номер в конфигурационном файле Rails. Так в database.yml файл просто добавьте две строки, как здесь:

...
adapter: postgresql
encoding: unicode
pool: 5
host: localhost
port: 5432

Это решило мою проблему:)

Прежде чем я использовал это исправление:

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

Но после каждой перезагрузки /tmp/.s.PGSQL.5432 был удален, и мне пришлось повторить эти команды. Решение работает, но оно ужасно, поэтому лучше просто изменить конфигурационный файл базы данных Rails:)

Получил эту ошибку, когда я настраивал Posgtres с Django, я использую Back Track, и он поставляется с установленным Postgres. Я предполагаю, что настройки - проблема. Я исправил это, удалив это полностью тогда переустановка как так.

sudo apt-get remove postgresql
sudo apt-get purge postgresql

Теперь запустите:

apt-get --purge remove postgresql\*

удалить все PostgreSQL из вашей системы. Простой очистки пакета postgres недостаточно, поскольку это просто пустой метапакет.

После удаления всех пакетов PostgreSQL выполните:

rm -r /etc/postgresql/
rm -r /etc/postgresql-common/
rm -r /var/lib/postgresql/
userdel -r postgres
groupdel postgres

Теперь вы должны быть в состоянии:

apt-get install postgresql

MacOSX здесь. У меня была такая же проблема после обновления моей установки postresql с pre-9.1 до 9.1.2 с использованием homebrew. (Кстати, не забудьте выгрузить базы данных перед обновлением с помощью pg_dump, базы данных до 9.1 несовместимы.) Та же проблема, те же сообщения об ошибках.

Удаление pg gem помогло мне. Мне действительно пришлось потанцевать, чтобы выяснить проблему. Сначала я сделал глобальное удаление драгоценных камней, очистив колоду от всех старых драгоценных камней (их было несколько). Затем я удалил pg из моего Gemfile, восстановил, восстановил ссылку на pg и снова восстановился.

После этого это сработало как шарм.

Привет, мир:)
Лучший, но странный способ для меня - делать следующие вещи.

1) Загрузите http://postgresapp.com/ или другую версию. Добавьте это приложение в папку /Applications/.

2) Добавить строку (команду) в файл .bash_profile (который находится в моем домашнем каталоге):

 экспорт PATH=/ Приложения /Postgres93.app/ Содержание /MacOS/bin/:$PATH 
Это путь к psql от Postgres93.app, Строка (команда) запускается каждый раз при запуске консоли.

3) Запустить Postgres93.app от /Applications/ папка. Он запускает локальный сервер (порт "5432", а хост "localhost").

4) После всех этих манипуляций я был рад бежать $ createuser -SRDP user_name и другие команды и посмотреть, что это работает! Postgres93.app можно заставить работать каждый раз, когда ваша система запускается.

5) Также, если вы хотите увидеть свои базы данных в графическом виде, вы должны установить PG Commander.app, Это хороший способ увидеть вашу базу данных postgres как красивые таблицы данных

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

Я попробовал большинство решений этой проблемы, но не смог заставить их работать.

Я побежал lsof -P | grep ':5432' | awk '{print $2}' который показал PID запущенного процесса. Однако я не мог убить его kill -9 <pid>,

Когда я побежал pkill postgresql процесс наконец остановился. Надеюсь это поможет.

У меня была эта проблема, мучающая меня, и после дальнейшего расследования rake db:setup), Я увидел, что rails пытается подключиться к ранее использовавшемуся экземпляру postgres, который был сохранен в переменных env как DATABASE_URL.

Исправление: unset DATABASE_URL

источник: /questions/26493459/podklyuchenie-rails-activerecord-k-nevernoj-baze-dannyih-postgres/26493477#26493477

gem uninstall pg

На OS X с Homebrew:

gem install pg -- --with-pg-config=/usr/local/bin/pg_config
Другие вопросы по тегам