Восстановление 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 ответов

Решение

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

Отредактируйте ваш.bash_profile или.profile или любую используемую вами оболочку и добавьте:export PATH=/usr/local/bin:$PATH

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

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

host: localhost

в database.yml для моей среды, и все было подливкой.

У меня была эта проблема с Mountain Lion, но единственное, что сработало для меня, это исправление:

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

sudo find / -name .s.PGSQL.5432

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

mkdir /var/pgsql_socket/

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

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

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

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

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

gem pristine pg

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

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

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

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

(после) `which psql' => /usr/local/psql/bin

Предложение Джона Вана 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"?

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

Я новичок в Rails, но добавление следующего в database.yml сработало для меня:

host: localhost

port: 5432

Не уверен, почему Rails по умолчанию использует доменные сокеты вместо TCP, в то время как PostgreSQL не устанавливает доменные сокеты по умолчанию.

В моем случае сервер не запускался из-за неправильных настроек общей памяти. Сначала я был смущен, потому что было запущено несколько процессов 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,

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

Кажется, что Woz прав, потому что каждый раз, когда я закрываю крышку моего MacBook Pro, он падает... Вот что сработало после аварии для меня:

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

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

Другие вопросы по тегам