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


196

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

Любые идеи, которые могут произойти, будут очень полезными! Спасибо!


Это также ударило кого-то в моем офисе; у нас была похожая проблема с получением неправильного двоичного файла, дополнительная проблема с попыткой подключения к доменным сокетам в другом каталоге с другими разрешениями, и похоже, что обновление уничтожило все данные в локальной базе данных. К счастью, это была просто коробка для разработки, так что это не так уж сложно, но немного неприятно. :)

1
Я сам сегодня попал в этот вопрос и вспомнил, что вчера читал твой вопрос. Рад видеть, что @Джон Ван вышел и объяснил это :)
Райан Бигг,

Ответы:


291

Это проблема ПУТИ. 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и теперь все должно быть снова в порядке.


12
Это исправило это. Вы также можете отредактировать / etc / paths и убедиться, что / usr / local / bin находится сверху
Грег

153
Также обратите внимание, что если вы установили pg gem ДО исправления вашего пути, он будет использовать неправильный psql. Если это так, удалите pg gem, а затем переустановите его (gem uninstall pg && gem install pg).
Троя

4
Это для доморощенного? Порты, кажется, помещают это в: / opt / local / lib / postgresql91 Так что убедитесь, что вы используете экспорт PATH = / opt / local / lib / postgresql91 / bin: $ PATH
Antony Stubbs

1
Мой путь сообщал правильно, но решение Троя об удалении pg gem и последующей переустановке bundler помогло мне.
Том Харрисон

2
Просто чтобы уточнить - похоже, что вы лучше всего правильно настроили свой путь, затем удалите / переустановите pg gem
Jamie Cook

90

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

host: localhost

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


9
будьте осторожны с этим: этот параметр изменяет доступ из доменного сокета к соединению TCP. Хотя это, вероятно, работает, вы можете потерять немного производительности и используемых портов на вашей машине, что может быть проблемой в зависимости от ваших настроек. Решение, предоставленное Джоном, является правильным.
Пилиф

3
'gem uninstall pg' (выберите все версии), затем снова 'bundle', чтобы установить версию pg из вашего Gemfile.
tmadsen

Спасибо, Дэйв Дж, это сработало и для меня. Я установил 10.7.3 update и rake db: migrate жаловался. Это исправило это.
Сатиш

Это сработало и для меня. Однако я оставил пароль и имя пользователя пустым.
Бенджамин

Я предполагаю, что это будет работать, потому что это вызывает соединение TCP / IP.
Дума

46

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

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

sudo find / -name .s.PGSQL.5432

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

mkdir /var/pgsql_socket/

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

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

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

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


Я чувствую, что это может быть для меня, но не могу заставить это работать. Я получаю это: ln: / var / pgsql_socket /: Нет такого файла или каталога
Эммануэль

Извините, я забыл, что столкнулся с этим тоже. Добавлен дополнительный шаг для ответа.
Бен

Благослови тебя, Бен. Высоко ценится.
Мэтт

29

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

gem pristine pg

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


Это сработало для меня, даже после того, как я исправил PATH и переустановил гем pg без изменений.
Эллиот Винклер

Спасибо за этот совет, Даррен
bhinks

15

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

psql -h localhost -U postgres

5

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

gem uninstall pg

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

Который получил это работает.


Я должен был запустить это дважды ... странно. Я удалил pg, а затем установил пакет, и это не удалось. Тогда просто сделал gem install pg и все заработало. Спасибо!
Дастин

3

Я тоже столкнулся с этим, но сам установил 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 что-то золотое.



1

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

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

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

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


1

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

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


У меня была проблема только из командной строки. Удаление файла /usr/local/var/postgres/postmaster.pid решило мою проблему.
Майкл А.

0

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

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



0

Если вам нравится постоянное изменение в вашем $ 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.


0

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

host: localhost

port: 5432

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


0

Мой 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"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.