Не удается подключиться к локальному 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

источник:https://stackoverflow.com/a/17420624/2577622


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

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

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


gem uninstall pg

на OS X с Homebrew:

gem install pg -- --with-pg-config=/usr/local/bin/pg_config