Відновлення Postgresql після оновлення до OSX 10.7 Lion


196

Нещодавно я модернізував до OSX 10.7, і в цей момент моя рейка встановила повну роботу при спробі підключення до сервера psql. Коли я це роблю з командного рядка, використовуючи

psql -U postgres

працює цілком чудово, але коли я намагаюся запустити сервер чи консоль рейлів з тим же ім'ям користувача та паролем, я отримую цю помилку

...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
Я сьогодні потрапив на цей і згадав, як читав ваше запитання вчора. Приємно бачити, що @John Wang вийшов і пояснив це :)
Ryan Bigg

Відповіді:


291

Це питання PATH. 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
Також зауважте, що якщо ви встановили gg gg до того, як виправите шлях, він використовуватиме неправильний psql. Якщо це так, видаліть драйвер pg та перевстановіть його (gem uninstall pg && gem install pg).
Троя

4
Це для домашнього пива? Порти, здається, розміщують це: / opt / local / lib / postgresql91 Тому переконайтесь, що ви використовуєте експортувати PATH = / opt / local / lib / postgresql91 / bin: $ PATH
Antony Stubbs

1
Мій шлях повідомляв правильно, але рішення Троя про видалення драгоценного каменя, а потім дозволяти постачальнику перевстановити зробив для мене трюк.
Том Гаррісон

2
Просто для уточнення - виглядає так, ніби вам найкраще правильно встановити шлях, потім видаліть / перевстановіть дорогоцінний камінь
Jamie Cook

90

Для тих із вас, хто зацікавлений, я зібрав рішення. Все, що мені потрібно було - додати

host: localhost

до database.yml для мого оточення, і все було важко.


9
будьте обережні з цим: Цей параметр змінює доступ з сокета домену до TCP-з'єднання. Хоча це, ймовірно, працює, ви можете втратити трохи продуктивності та зручних портів на вашій машині, що може бути проблемою залежно від налаштувань. Рішення, яке надає Джон, є правильним.
pilif

3
'gem uninstall pg' (виберіть усі версії), а потім 'bundle' знову, щоб встановити pg-версію з вашого Gemfile працював для мене.
tmadsen

Спасибі Дейву Г, це теж працювало і для мене. Я встановив оновлення 10.7.3 і 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/

Я підозрюю, що для більшості людей на гірському Леві ви можете просто створити рейтинг і зробити симлінк, а не витрачати час на пошук, якщо символьне посилання не працює.

PS - мій PostgreSQL був встановлений через офіційний інсталятор.


У мене є відчуття, що це може бути для мене, але я не можу змусити його працювати. Я отримую це: ln: / var / pgsql_socket /: Немає такого файлу чи каталогу
Emmanuel

Вибачте, я забув, що натрапив і на це. Додано додатковий крок для відповіді.
Бен

Благослови Бену. Велику оцінку.
Метт

29

Якщо проблема не зникає, змінивши шлях (як це було для мене), також спробуйте це ...

gem pristine pg

Видається, що проблема (частково) полягає в самому самому pg gem. Коли він будується, він з'ясовує, де повинен бути сокет домену. Якщо ви зміните розташування сокета домену після факту, це, здається, не набере чинності, поки ви не відновите дорогоцінний камінь.


Це спрацювало для мене, навіть після того, як я зафіксував PATH та перевстановив дорогоцінний камінь без первозданної форми.
Елліот Вінклер

Дякуємо за цю пораду, Даррен
bhinks

15

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

psql -h localhost -U postgres

5

У мене була та сама проблема, і у мене виникли проблеми, коли рішення Джона Ванга працювало. Як зауважив Даррен, існує проблема із дорогоцінним каменем pg. Щоб налагодити роботу, мені потрібно було:

gem uninstall pg

Потім перевстановіть.

Котрий спрацював.


Мені довелося запустити це двічі ... дивно. Я видалив pg, а потім встановити пакет, і він не вдався. Потім просто встановив дорогоцінний камінь pg, і він спрацював. Дякую!
Дастін

3

Я також наткнувся на це, але я сам встановив postgres (не з домашньою мовою). Якщо це так, вам потрібно знайти старий шлях до 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

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

На цьому веб-сайті детально знайдено рішення, яке знайшов мій колега. Це зводиться до виконання одного сценарію оболонки, який буде

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

Це стосується застереження про те, що системний Postgres за замовчуванням є будь-яким встановленим пивом, тому вам потрібно здійснити судження про те, чи підходить саме вам. Я не бачу, що мені потрібен Postgres 8.4, особливо 9x, але YMMV


1

Іншим можливим рішенням, яке працювало для мене, є скидання файлу пошти, видалення його. Просто запустіть:

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

У моєму випадку сервер не запустився через неправильні налаштування спільної пам'яті. Спочатку я був розгублений, оскільки було запущено декілька постгресових процесів, але це були стандартні системні процеси. Шукатиpostmaster процеси!

Все, що мені потрібно було зробити, - це змінити параметри спільної пам'яті . У моєму випадку непотрібне налаштування шляхів.


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

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

host: localhost

port: 5432

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


0

Мій PostgreSQL встановлений в / Бібліотека / 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.