Не удается подключиться к локальному 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?
извините за вопросы 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.обертка на http://pastebin.com/Gj5TpP62.
Я пытался бежать port load postgresql184-server
но получил ошибку Error: Port postgresql184-server not found
.
Я все еще очень смущен, как это исправить, и ценю любые указатели "для чайников".
спасибо!
EDIT2
эта проблема началась после того, как у меня были некоторые проблемы с daemondo. Мои локальные приложения Rails были сбой с ошибка приложения по строкам "daemondo gem не может быть найден". Затем я прошел через серию обновлений пакетов, обновлений gem, обновлений портов и обновлений brew, чтобы попытаться найти проблему.
может ли эта ошибка быть проблемой с daemondo?
21 ответов
это действительно похоже на ошибку прав доступа к файлу. Сокеты домена Unix-это файлы и имеют права пользователя, как и любые другие. Похоже, что пользователь OSX, пытающийся получить доступ к базе данных, не имеет прав доступа к файлу сокета. Чтобы подтвердить это, я сделал несколько тестов на Ubuntu и psql, чтобы попытаться сгенерировать ту же ошибку (см. ниже).
нужно проверить разрешения на файл сокета и его каталоги /var
и /var/pgsql_socket
. Ваши Рельсы приложение (пользователь OSX) должно иметь разрешения execute (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.
EDIT:
я сделал быстрый поиск в google, который вы можете посмотреть, чтобы увидеть, если это relavent.
Это вполне может привести к любой попытке 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
ошибка пароля пользователя auth:
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-домен) сокет, клиент может использовать другое место. (это происходит, если вы смешиваете дистрибутивы или у вас есть дистрибутив, установленный где-то, и есть другая (например, из источника) установка в другом месте), с клиентом и сервером, использующим разные рандеву адреса.
если postgres работает, и сокет действительно существует, вы можете использовать:
psql -h /the/directory/where/the/socket/was/found mydbname
(который пытается подключиться к Unix-домену socket)
; теперь вы должны получить приглашение psql: try \d
а то \q
бросить. Вы также можете
попробуйте:
-
psql -h localhost mydbname
.
(который пытается подключиться к localhost (127.0.0.1)
если эти попытки терпят неудачу из-за недостаточной авторизации, вы можете изменить pg_hba.conf (и SIGHUP или restart) в этом случае: также проверьте журналы.
аналогичный вопрос: не могу получить Postgres started
Примечание: Если вы можете добраться до приглашения psql, быстрое решение этой проблемы - просто изменить свой config/database.yml
добавить:
host: localhost
или вы можете попробовать добавить:
host: /the/directory/where/the/socket/was/found
в моем случае, host: /tmp
Попробуйте удалить PG gem (gem uninstall pg
) затем переустановка -- если вы используете bundler, то bundle install
, else gem install pg
. Кроме того, убедитесь, что path выбирает правильную версию: Lion имеет версию posgresql (предыдущие версии этого не делали), и она может быть в пути до вашей локально установленной версии (например, MacPorts, 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. см. мой вопрос/ответ, используя следующую ссылку для пошаговых инструкций. моя проблема не была связана с файлами permissions:
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.
Итак, я нашел этот ответ на так связанную с ошибкой несовместимости: 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 не был выключен правильно и почтмейстер.файл pid все еще присутствовал (должен быть удален при правильном выключении автоматически) в моей папке postgres.
удалил это и все хорошо
Я получаю эту же ошибку (оказывается, это была ошибка с postmaster.pid
. Вот как я получил postgres и работает снова (кредит Рикардо Бурильо для исправления):
$ rm /usr/local/var/postgres/postmaster.pid
$ pg_resetxlog -f /usr/local/var/postgres
у меня была аналогичная проблема при попытке использовать postgresql с rails. Обновление моего Gemfile для использования новой версии gem pg решит эту проблему для меня. (gem pg версия 0.16.0 работает). В Gemfile используйте:
gem 'pg', '0.16.0'
затем запустите следующее, Чтобы обновить gem
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 с brew.
Это случилось со мной сегодня после того, как батарея моего Macbook умерла. Я думаю, что это может быть вызвано неправильным выключением. Все, что вам нужно сделать в таких случаях, как мой, это удалить postmaster.пид
перейдите в папку
cd /usr/local/var/postgres
проверьте, если postmaster.пид присутствует
ls
удалить почтмейстер.пид
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, я использую задний трек, и он поставляется с установленным 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
Я прочитал много тем об этой ошибке, и решение для меня было просто перезапустить postgres с:
sudo service postgresql restart
который здесь не упоминается.
MacOSX здесь. У меня была та же проблема после обновления моей установки postresql с pre-9.1 до 9.1.2 с помощью homebrew. (Кстати, не забудьте сбросить базы данных перед обновлением с помощью pg_dump, базы данных pre-9.1 несовместимы.) Та же проблема, те же сообщения об ошибке.
удаление PG gem сделало трюк для меня. На самом деле мне пришлось немного потанцевать, чтобы обнаружить проблему. Сначала я сделал глобальную деинсталляцию gem, очистив колоду от всех старых драгоценных камней (их было несколько). Затем я вытащил pg из своего Gemfile, собрал, восстановил ссылку pg и снова отскочил.
после этого это сработало как заклинание.
всем привет :)
лучшим, но странным способом для меня было делать следующие вещи.
1) скачать postgres93.app или другой вариант. Добавьте это приложение в папку/ Applications/.
2) добавить строку (команду) в файл .bash_profile
(который находится в моем домашнем каталоге):
export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATHЭто путь к
psql
С Postgres93.app
. Строка (команда) выполняется каждый раз, когда консоль начатый.
3) запуск Postgres93.app
С /Applications/
папка. Он запускает локальный сервер (порт "5432", а хост - "localhost").
4) после всех этих манипуляций я был рад работать $ createuser -SRDP user_name
и другие команды и увидев, что это сработало! Postgres93.app
можно заставить работать каждый раз, когда ваша система запускается.
5) также, если вы хотите видеть свои базы данных графически, вы должны установить PG Commander.app
. Это хороший способ увидеть ваши postgres DB как довольно данных-таблицы
конечно, это полезно только для локального сервера. Я буду рад, если эти инструкции помогут другим, кто столкнулся с этой проблемой.
у меня была эта проблема, преследующая меня ,и при дальнейшем исследовании (работает rake db:setup
), Я видел, что rails пытается подключиться к ранее использованному экземпляру postgres - тому, который был сохранен в переменных env как DATABASE_URL.
исправления: unset DATABASE_URL
Я пробовал большинство решений этой проблемы, но не мог заставить их работать.
Я побежал lsof -P | grep ':5432' | awk '{print }'
который показал PID запущенного процесса. Однако я не мог убить его kill -9 <pid>
.
когда я подбежал pkill postgresql
процесс, наконец, остановился. Надеюсь, это поможет.