PostgreSQL працює локально, але я не можу підключитися. Чому?


32

Нещодавно оновив свою машину з Mac OS X Lion (10.7.4) до Mountain Lion (10.8), і я вважаю, що вона захистила мою установку PostgreSQL. Він був встановлений спочатку через Homebrew. Я не DBA, але сподіваюся, що хтось може сказати мені, як вирішити цю проблему.

Я не в змозі підключитися (але міг до передгірського Лева):

$ psql -U rails -d myapp_development
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Але Postgres все ще чітко працює:

$ ps aux | grep postgres
meltemi          2010   0.0  0.0  2444124   5292   ??  Ss   Wed01PM   0:00.02 postgres: rails myapp_development [local] idle    
meltemi           562   0.0  0.0  2439312    592   ??  Ss   Wed12PM   0:02.28 postgres: stats collector process       
meltemi           561   0.0  0.0  2443228   1832   ??  Ss   Wed12PM   0:01.57 postgres: autovacuum launcher process       
meltemi           560   0.0  0.0  2443096    596   ??  Ss   Wed12PM   0:02.89 postgres: wal writer process       
meltemi           559   0.0  0.0  2443096   1072   ??  Ss   Wed12PM   0:04.01 postgres: writer process       
meltemi           466   0.0  0.0  2443096   3728   ??  S    Wed12PM   0:00.85 /usr/local/bin/postgres -D /usr/local/varpostgres -r /usr/local/var/postgres/server.log

І він відповідає на запити (як на тестовий, так і на db розробки) з локального додатку Rails

  User Load (0.2ms)  SELECT "users".* FROM "users" 
  Rendered users/index.html.haml within layouts/application (1.3ms)

Здається, немає жодного /var/pgsql_socket/каталогу, не кажучи вже про /var/pgsql_socket/.s.PGSQL.5432згаданий вище файл сокета!?! Можливо, інсталяція Mountain Lion витерла це?

$ ls -l /var/ | grep pg
drwxr-x---   2 _postgres  _postgres    68 Jun 20 16:39 pgsql_socket_alt

Як я можу це усунути?


Це не адміністратор постгрессу, але справа відсутній файл сокета. Створіть каталог / var / pgsql_socket (з дозволом на запис користувача) та перезапустіть сервер. Подивіться, чи це виправить
Дерек Дауні

Супутнє запитання щодо SO . Схоже, Apple не зробила великої роботи з оновленням.
Ервін Брандстеттер

чи є згадка про файл сокета, що створюється у файлі журналу /usr/local/var/postgres/server.log?
Philᵀᴹ

@ErwinBrandstetter Як ви очікуєте, що Apple зробить "хорошу роботу" з оновлення встановлених сторонніх програм * nix вручну?
Philᵀᴹ

@ Філ - жодної згадки. Я починаю думати, що це може бути проблемою змінної контуру. Я думаю, що моє $PATHзмінення з оновленням /usr/binвипереджає, /usr/local/binі я думаю, що Mountain Lion може поставитись із попередньо встановленою PostgreSQL!?! Розслідування ...
Мелтемі

Відповіді:


30

Я виявив, що у мене надзвичайно схожа проблема, а саме те, що postgres відкриває розетку, /var/pgsql_socket_altде жодне моє програмне забезпечення не очікує шукати, але рішення моєї проблеми було не лише проблемою з моєю $PATH.

Я повинен був створити каталог /var/pgsql_socket, Чаун його до себе, і безліч unix_socket_directoryв postgresql.conf(розташований в /usr/local/var/postgres) в цей каталог, а потім використовувати pg_ctlбінарний файл в , /usr/local/binщоб почати правильний сервер Postgres успішно (що, де $PATHприходить - переконатися , which pg_ctlП О С Т /usr/local/bin/pg_ctl, або просто завжди назвати це прямо).

Це може допомогти іншим користувачам, які знайдуть це питання через /var/pgsql_socket_altзгадку.


Цікаво. Ви також на Гірському Леві? Ви встановили PostgreSQL з Homebrew? Якщо так, цікавіться, чи хтось інший може перевірити це рішення на відміну від зміни мого, $PATHяк я це зробив.
Мелтемi

Так, так, і я сподіваюся!
Буде

@wolftron ваше рішення було для мене ударом (Mountain Lion, homebrew / postgres, / var / pgsql_socket_alt, цілих дев'ять). Це новий випуск про гірський лев з домашнім? Я відкрию їм квиток, якщо ви так вважаєте.

Схоже, ми отримали підтвердження від @Jamie.
Буде

Я можу підтвердити цю проблему і рішення на ОС X 10.8.2 / варити встановлення postgresql 9.2.1.
Хартвіг

8

Найбільш правдоподібним і типовим поясненням може бути те, що те, psqlщо постачається з домашньою мовою, є тим, /usr/local/bin/psqlщо відрізняється від того, яке було б у вашому $ PATH, наприклад /usr/bin/psql(у комплекті з OS X). Ви можете спробувати повний шлях:

$ /usr/local/bin/psql -U rails -d myapp_development

Також у psвисновку вашого питання є щось досить незвичне : сервер postgres працює під meltemiкористувачем Unix, тоді як, як правило, для цього використовується виділений postgresкористувач Unix.


Також _postgres(з підкресленням) для користувача / групи мені невідомі. Це артефакт чи очікуваний?
Ервін Брандстеттер

Так, це, $PATHяк ви заявили, є проблемою. Речі працюють як раніше, коли я використовую /usr/local/bin/psqlдля доступу до бази даних. У Лева не було системи PostgreSQL або мій $ PATH був налаштований інакше. Минув рік, як я востаннє заплутався з цим, тому не можу точно згадати. Що стосується користувача Unix ... з установкою Homebrew PostgreSQL сервер запускається запускається, а користувач встановлюється як місцевий користувач, який його встановив, за замовчуванням. Речі налаштовані інакше на Mac OS X Server, який автоматично запускає PostgreSQL postgres.
Мелтемi

4

Я не знаю жодного конфігураційного файлу для клієнта psql. Однак psql поважає ряд змінних середовища, які співвідносяться з параметрами командного рядка.

Отже, щоб psql автоматично використовував вибраний вами сокет, ви можете встановити змінну PGHOST в каталог, що містить сокет. тобто

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase

1
Це ніде не задокументовано. Я можу знайти, що ви можете встановити PGHOST в каталог, де живуть файли сокетів. Але це насправді працює. Спасибі!
Ендрю Шульман

3

Спробуйте:

psql -U rails -d myapp_development -h localhost

або

psql -U rails -d myapp_development -h 127.0.0.1

3

Пізно, але я вважаю це корисним: http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion

Це було для Lion, але у мене виникли ті ж проблеми, що й у цій темі після оновлення з 10.6.8 до Mountain Lion та встановлення PostgreSQL через HomeBrew до того, як 10.6.8. У мене також була таємнича /var/pgsql_socket_altпапка після оновлення, але я її просто видалив і створив, /var/pgsql_socketяк запропонував @wolftron. Однак це було не остаточне рішення.

Якби я залишив unix_socket_directoryпорожнє / прокоментований postgresql.conf, будь-який проект, який існував до оновлення, скаржився б на /var/pgsql_socketвідсутність розетки . Але якби я змінив конф і конфідентовано var/pgsql_socket, будь-які нові проекти скаржилися б на /tmpвідсутність розетки . Дуже засмучує ... поки я не встановив її знову pg gemв проект до 10,8 ( gem uninstall pg && gem install pg) і не залишив unix_socket_directoryкоментарі у confфайлі. Після швидкого pg_ctlперезавантаження сервера працювали як нові, так і старі проекти. Моя розетка pgsql /tmpзараз живе , fwiw.

Сторінка: якщо ви використовуєте activerecord-postgresql-adapterдорогоцінний камінь, спочатку видаліть його, потім знову встановіть pg, а потім встановіть activerecord-postgresql-adapterзнову.


2

Я тільки що підписався на dba SE, так що, здається, не зможете коментувати відповідну публікацію (що це за клік!).

Однак я був впевнений, що перебуваю в тому ж човні, що і @thure. Я переконався, що / usr / local / bin був раніше в моєму PATH, ніж / usr / bin, перевірив, з якими двійковими файлами оболонка хеширується, whichі typeт.д.

Я бачив ті ж симптоми, що і @thure. Тоді у мене було богоматіння; Я зрозумів, що я відновив pgдорогоцінний камінь (я використовую Ruby) в оболонці, на PATH якої негативно впливав path_helper Mac (який запускається з / etc / profile та ставить / usr / bin до / usr / local / bin) .

Я видалив pg і перевстановив його в оболонку, чий PATH був правильним. Раптом я міг підключитися!

Тому переконайтеся, що ви перекомпілювали свої мови, що зв’язують людей, і нехай вони знайдуть правильну копію (імовірно) pg_config.



1

Я виявив, що посилання на фактичне місце розташування до очікуваного місця працювало чудово:

sudo ln -s /var/pgsql_socket_alt /var/pgsql_socket

по лінії прийнятої відповіді від @thure, але простіше.


1

Ось, 2016 рік, El Capitan є там, і Apple продовжує змінювати справи. Postgres встановлюється як частина ОС, а файл конфігурації postgres встановлює властивість unix_socket_directories в postgresql.conf в / tmp. Розетка знаходиться в /tmp/.s.PGSQL.5432. Мені вдалося подолати проблему, виконавши наступне:

sudo ln -s /tmp /var/pgsql_socket

Сподіваюся, що це комусь допоможе.


1

Шукайте правильний файл сокета

find / -name .s.PGSQL.5432 -ls

З результату отримайте шлях до файлу і використовуйте шлях з параметром "-h" в команді psql

Наприклад, це спосіб підключення до бази даних календаря та контактів сервера macOS (у сеансі ssh до сервера):

sudo psql -U _calendar -h /private/var/run/caldavd/PostgresSocket/ -d caldav

Потім файл сокета на шляху буде використовуватися для підключення.


1

За замовчуванням postgres, схоже, намагається підключитися через unix-домен-сокети. UNIX ДОМАШНИЙ КОМПЛЕКТ

Це трапилося зі мною, коли я запускав примірник postgres на docker. Ви повинні бачити, яке з'єднання приймає ваш сервер. Для мене це був явно TCP, а не unix доменний сокет.

Додаючи прапор, щоб прийняти хост, переспрямовано з'єднання на правильний шлях і виправлено проблему.

psql -U username -p port -h host

PS: Розетки домену Unix працюють на рівні ядра, і з'єднання не повинно пройти весь джаз, необхідний для TCP-з'єднань. Вони досить швидкі та ефективні, коли ви хочете встановити зв’язок із власною машиною за допомогою іншого процесу, як частини міжпроцесорної комунікації.


0

Привіт світ :)
Найкращий, але дивний спосіб для мене був робити наступні справи.

1) Завантажте postgres93.app або іншу версію. Додайте цю програму в / програми / папку.

2) Додайте рядок (команду) у файл .bash_profile(який знаходиться в моєму домашньому каталозі):

експортувати PATH = / Програми / Postgres93.app / Зміст / MacOS / бін /: $ PATH
Це шлях до psqlз Postgres93.app. Рядок (команда) виконується кожного разу, коли запускається консоль.

3) Запуск Postgres93.appіз /Applications/папки. Він запускає локальний сервер (порт - "5432", а хост - "localhost").

4) Після всіх цих маніпуляцій я був радий виконувати $ createuser -SRDP user_nameта інші команди і бачити, що це працює! Postgres93.appможна запускати кожного разу при запуску системи.

5) Крім того, якщо ви хочете графічно бачити свої бази даних, вам слід встановити PG Commander.app. Це хороший спосіб бачити ваші БД постгрес як гарні таблиці даних

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



0

Я отримав цю саму помилку при спробі запуску psqlв командному рядку. Виявилося, що моє рішення було набагато простішим. Я неправильно налаштував порт прослуховування у файлі config: /etc/postgresql/9.4/main/postgres.conf . Я змінив порт з порту = 5432 на порт = 5433. Коли я змінив його назад на 5432, він працював так, як очікувалося.

Щоб перевірити, чи зробили ви щось подібне, можете запустити $ psql -p5433 Існує ряд корисних варіантів, таких як команда psql, яку ви можете знайти тут: http://www.postgresql.org/docs/9.4/static/app-psql .html, щоб ви могли перевірити свою власну неправильну конфігурацію. Звичайно, ви можете просто видалити останній набір змін конфігурації з файлів * .conf, щоб перевірити, чи є вони джерелом вашої проблеми. Я думаю, що це, безумовно, варто перевірити, перш ніж розібратися з дозволами на файли та правами власності. (Тільки не забудьте /etc/init.d/postgresql restart)

Я не міг знайти конфігураційний файл, який встановлює значення за замовчуванням для команди CLQ psql. Хтось може прокоментувати це, будь ласка?

Для мене завжди повертаюся до свого першого принципу програмування: "Я зазвичай є джерелом будь-якої заданої помилки!"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.