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

196

Недавно я обновился до OSX 10.7, после чего моя установка рельсов была полностью запущена при попытке подключиться к серверу 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"?

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

  • 0
    Это также ударило кого-то в моем офисе; у нас была похожая проблема с получением неправильного двоичного файла, дополнительная проблема с попыткой подключения к доменным сокетам в другом каталоге с другими разрешениями, и похоже, что обновление уничтожило все данные в локальной базе данных. К счастью, это была просто коробка для разработки, так что это не так уж и сложно, но немного неприятно. :)
  • 1
    Я сам сегодня попал в этот вопрос и вспомнил, что вчера читал ваш вопрос Приятно видеть, что Джон Ван вышел и объяснил это :)
Теги:
ruby-on-rails-3
osx-lion
osx

15 ответов

305
Лучший ответ

Это проблема PATH. Теперь 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, и теперь он снова будет в порядке.

  • 12
    Это исправило это. Вы также можете отредактировать / etc / paths и убедиться, что / usr / local / bin находится сверху
  • 153
    Также обратите внимание, что если вы установили pg gem ДО исправления вашего пути, он будет использовать неправильный psql. Если это так, удалите pg gem, а затем переустановите его (gem uninstall pg && gem install pg).
Показать ещё 6 комментариев
87

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

host: localhost

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

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

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

  • 0
    Я чувствую, что это может быть для меня, но не могу заставить это работать. Я получаю это: ln: / var / pgsql_socket /: нет такого файла или каталога
  • 0
    Извините, я забыл, что столкнулся с этим тоже. Добавлен дополнительный шаг для ответа.
Показать ещё 4 комментария
30

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

gem pristine pg

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

  • 2
    Спасибо, что прибил мою проблему (используя postgresapp.com )
  • 0
    Это сработало для меня, даже после того, как я исправил PATH и переустановил гем pg без изменений.
Показать ещё 1 комментарий
15

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

psql -h localhost -U postgres
  • 1
    +1: спасибо за ваш пост, решил мою проблему.
  • 0
    решил тоже мой.
5

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

gem uninstall pg

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

Что заработало.

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

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

/opt/local/lib/postgresql91 

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

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

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

3

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

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

(х) export PATH =/usr/local/psql/bin: $PATH

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

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

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"?

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

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

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

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

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

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

0

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

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

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

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

host: localhost

port: 5432

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

0

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню