Восстановление Postgresql после обновления до OSX 10.7 Lion


недавно я обновился до OSX 10.7, и в этот момент моя установка rails полностью прервалась при попытке подключиться к серверу psql. Когда я делаю это из командной строки с помощью

psql -U postgres

он работает абсолютно нормально, но когда я пытаюсь запустить сервер rails или консоль с тем же именем пользователя и паролем, я получаю эту ошибку

...activerecord-3.0.9/lib/active_record/connection_adapters/postgresql_adapter.rb:950:in `initialize': could not connect to server: Permission denied (PGError) 
Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

любые идеи, что может происходить будет очень полезно! Спасибо!

15 195

15 ответов:

это вопрос пути. Mac OSX Lion теперь включает Postgresql в систему. Если вы делаете which psql вы, вероятно, увидите usr/bin/psql вместо usr/local/bin/psql который является правильным доморощенным. Если вы запустите brew doctor вы должны получить сообщение о том, что вы должны добавить usr/local/bin к началу вашего пути env переменной.

редактирование .bash_profile или .профиль или какая-либо оболочка, которую вы используете и добавляете: export PATH=/usr/local/bin:$PATH

как первый экспорт для PATH тогда либо выйдите из оболочки сеанс или исходный файл с source ~/.bash_profile и теперь все должно быть в порядке снова.

для тех из вас, кто заинтересован, я собрал решение. Все, что мне нужно было добавить

host: localhost

в базу данных.yml для моей среды и все было подливкой.

у меня была эта самая проблема с горным львом, но единственное, что работало для меня было исправления:

проверьте, где находится фактическая цель:

sudo find / -name .s.PGSQL.5432

мне нужно было создать этот каталог:

mkdir /var/pgsql_socket/

затем, используя результат из Находки выше, создайте эту символическую ссылку:

ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

Я подозреваю, что для большинства людей на Mountain Lion вы можете просто создать dir и сделать символическую ссылку, а не тратить время на поиск, если только символическая ссылка не работает.

PS-мой PostgreSQL был установлен через официальный установщик.

Если проблема сохраняется после изменения пути (как это было для меня), также попробуйте это...

gem pristine pg

похоже, что проблема (частично) заключается в самом драгоценном камне pg. Когда он строит, он выясняет, где должен быть сокет домена. Если вы измените местоположение сокета домена после того, как он, похоже, не вступит в силу, пока вы не перестроите драгоценный камень.

для тех, кто установил непосредственно из официального установщика, просто добавление хоста в команду работает без изменений пути:

psql -h localhost -U postgres

У меня была та же проблема, и у меня были проблемы с решением Джона Вана. Как отметил Даррен, есть проблема с драгоценным камнем pg. Чтобы заставить его работать мне нужно:

gem uninstall pg

затем переустановить.

что заставило его работать.

Я тоже столкнулся с этим, но я сам установил postgres (не с homebrew). Если это так, вам нужно найти старый путь к psql (который может быть /usr/local/bin, но для меня был /usr/local/pgsql/bin) и добавить его к вашему $PATH.

(перед) which psql = > / usr/bin / psql

(исправлено) путь экспорта= / usr / local / psql / bin:$PATH

(после) по которым, используя psql' => /usr/местные/psql в/ОГРН

предложение Джона Вана source ~/.bash_rc после этого вы добавляете, что для вашего bash_rc это золото.

это для самодельщиков? Порты, кажется, положить его в:

/opt/local/lib/postgresql91 

поэтому убедитесь, что вы используете экспорт

PATH=/opt/local/lib/postgresql91/bin:$PATH

проблема с портами Mac: https://trac.macports.org/ticket/30125

Я не доволен самыми популярными ответами, поскольку они либо зависят от пользователя ОС, либо переназначают Postgres для использования TCP вместо сокетов домена, как указано @pilif. Я видел другое решение, которое включает в себя переупорядочение путей по умолчанию на системном уровне, чтобы проверить путь Brew перед основным системным путем, но это кажется опасным, поскольку это может повлиять на все другие конфликты имен приложений, подобные этому.

этот сайт подробно решение мой коллега нашел. Оно сводится к выполнению одного сценария оболочки, который будет

  1. резервное копирование файлов Postgres 8.4 в отдельный каталог
  2. символическая ссылка на установку пива Postgres на месте

Это поставляется с оговоркой, что система по умолчанию Postgres-это то, что brew установил, поэтому вам нужно сделать решение о том, правильно ли это для вас. Я не вижу себя нуждающимся в Postgres 8.4 специально над 9.x, но YMMV

еще одно возможное решение, которое сработало для меня, - это сброс файла postmaster путем его удаления. Просто наберите:

rm /usr/local/var/postgres/postmaster.pid 

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

/usr/local/var/postgres/server.log

сообщение об ошибке у меня было:

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 161) running in data directory 
"/usr/local/var/postgres"?

все отлично работало после этого.

в моем случае сервер не запустился из-за неправильных настроек общей памяти. Сначала я был смущен, потому что было запущено несколько процессов postgres, но это были стандартные системные процессы. Ищите postmaster процессы!

все, что мне нужно было сделать, это изменить настройки общей памяти. Возиться с настройками пути в моем случае не требовалось.

возможно, Вам потребуется указать хост вашей базы данных.

Если вам нравится постоянное изменение в вашей $ PATH попробуйте это:

defaults write $HOME/.MacOSX/environment PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/local/bin"

это позволит переписать ~/.MacOSX/environment.plist.

Я новичок в Rails, но добавляю следующее в

мой PostgreSQL установлен в /Library/PostgreSQL, так что /usr/var материал не работал для меня.

похоже, что ВОЗ прав, потому что каждый раз, когда я закрываю крышку своего macbook pro, он падает... Вот что сработало после аварии для меня:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"