Восстановление Postgresql после обновления до OSX 10.7 Lion - PullRequest
196 голосов
/ 21 июля 2011

Я недавно обновился до 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 ]

291 голосов
/ 21 июля 2011

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

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

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

90 голосов
/ 21 июля 2011

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

host: localhost

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

46 голосов
/ 27 июля 2012

У меня была такая же проблема с Горным Львом, но единственное, что мне помогло, было это исправление :

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

sudo find / -name .s.PGSQL.5432

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

mkdir /var/pgsql_socket/

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

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

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

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

29 голосов
/ 29 ноября 2011

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

gem pristine pg

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

15 голосов
/ 24 июля 2011

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

psql -h localhost -U postgres
5 голосов
/ 10 декабря 2011

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

gem uninstall pg

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

3 голосов
/ 24 ноября 2011

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

/opt/local/lib/postgresql91 

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

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

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

3 голосов
/ 22 июля 2011

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

(до) which psql => / usr / bin / psql

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

(после) `которыйpsql '=> / usr / local / psql / bin

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

1 голос
/ 03 октября 2012

Другое возможное решение, которое сработало для меня, - сброс файла 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"?

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

1 голос
/ 17 января 2012

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

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

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

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

...