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

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

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

Ответ 1

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

Ответ 2

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

host: localhost

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

Ответ 3

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

Ответ 4

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

gem pristine pg

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

Ответ 5

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

psql -h localhost -U postgres

Ответ 6

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

gem uninstall pg

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

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

Ответ 7

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

Ответ 8

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

/opt/local/lib/postgresql91 

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

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

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

Ответ 9

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

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

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

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

Ответ 10

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

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

Ответ 11

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

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

Ответ 12

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

Ответ 13

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

Ответ 14

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

host: localhost

port: 5432

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

Ответ 15

Мой 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"