Не удается подключиться к локальному 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
gem uninstall pg
На OS X с Homebrew:
gem install pg -- --with-pg-config=/usr/local/bin/pg_config