psql: не вдалося підключитися до сервера: немає такого файлу чи каталогу (Mac OS X)


247

Після перезавантаження мого Mac я отримав жахливу помилку Postgres:

psql: could not connect to server: No such file or directory
 Is the server running locally and accepting
 connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

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


1
В якості перевірки
здоровості

1
Коли ви залишаєте відповідь, спробуйте пояснити, ЧОМУ це відбувається, або як працює система Postgres, тому ми не просто пробуємо випадкові речі.
Нік Рез

6
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 працював на мене
Derk Jan Speelman

Заваріть перевстановлення postgresql це вирішило мою проблему
Аджай Кумар

Відповіді:


422

ПОПЕРЕДЖЕННЯ. Якщо ви видалите postmaster.pid, не переконавшись, що у вас дійсно немає postgresзапущених процесів, це може назавжди пошкодити вашу базу даних . (PostgreSQL повинен автоматично видалити його, якщо постмайстер вийшов.)

РІШЕННЯ: Це вирішило проблему - я видалив цей файл, і тоді все працювало!

/usr/local/var/postgres/postmaster.pid

-

і ось, як я зрозумів, чому це потрібно видалити.

  1. Я використовував наступну команду, щоб побачити, чи існують якісь PG-процеси. для мене таких не було, я навіть не міг запустити PG-сервер:

    ps auxw | grep post
  2. Я шукав файл .s.PGSQL.5432, який був у повідомленні про помилку вище. я використав таку команду:

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

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

  3. Я переглянув мої журнали сервера і побачив таку помилку:

    cat /usr/local/var/postgres/server.log

    наприкінці журналу сервера я бачу таку помилку:

    FATAL:  pre-existing shared memory block (key 5432001, ID 65538) is still in use
    HINT:  If you're sure there are no old server processes still running, remove the shared memory block or just delete the file "postmaster.pid".
  4. Дотримуючись поради у повідомленні про помилку, я видалив файл postmaster.pid у тому ж каталозі, що і server.log. Це вирішило проблему, і я зміг перезапустити.

Отож, схоже, що заморожування моєї книги та її перезавантаження змусили Postgres думати, що процеси все ще тривають навіть після перезавантаження. Видалення цього файлу вирішено. Сподіваюсь, це допомагає іншим! У багатьох людей є подібні проблеми, але більшість відповідей стосувалися дозволів на файли, тоді як у моєму випадку все було інакше.


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

2
Просто FWIW, видалення postmaster.pid небезпечно, ви повинні бути дійсно впевнені , що немає ніяких postgresпроцесів , запущених перш ніж це зробити.
Крейг Рінгер

21
Чудова відповідь. Дякуємо, що опублікували весь ваш процес, а не лише потенційно руйнівну команду!
доджосто

3
Домовились. Відповідь про postmaster.pid хороша, але кожен крок процесу з'ясування, якщо / де працює postgres, є неоціненним . Дякую!
Клінтон

11
У моєму журналі postgres про macos не було /usr/local/var/log/postgres.log.
ryantuck

172

Ніщо з перерахованого вище не працювало для мене. Мені довелося перевстановити Postgres наступним чином:

  • Видаліть postgresql за допомогою варіння: brew uninstall postgresql
  • brew doctor (виправте все, що тут)
  • brew cleanup
  • Видаліть усі папки Postgres:

    • rm -r /usr/local/var/postgres
    • rm -r /Users/<username>/Library/Application\ Support/Postgres
  • Перевстановіть postgresql заваркою: brew install postgresql

  • Запустити сервер: brew services start postgresql
  • Тепер вам слід створити бази даних ... ( createdb)

4
Працював для мене, але мені не довелося видаляти фактичну базу даних і не мав папки в службі підтримки програм. Думаю, що під час встановлення постгресів деякі елементи пивоваріння зірвали символьні посилання. Виправлення та встановлення постгресів знову вирішило проблему. Дякую!
Кульбі

2
Ні ця, ні найвища відповідь не спрацювали для мене, поки я теж не побігbrew postgresql-upgrade-database
ErikAGriffin

Вони працювали для мене, за винятком того, що мені не довелося видаляти старі дані.
Амаль Антоній

Для підтвердження: це видаляє всі ваші бази даних, правильно? Мені вдалося обійтись лише brew reinstall postgres, підтвердивши, що останній номер основної версії Homebrew Postgres був таким самим, як і мої поточні (зламані).
Джейкоб Форд

85

Якщо ви перебуваєте на macOS та встановлюєте postgres через домашню мову, спробуйте перезапустити його

brew services restart postgresql

Якщо ви перебуваєте на Ubuntu, ви можете перезапустити його будь-якою з цих команд

sudo service postgresql restart

sudo /etc/init.d/postgresql restart

34

Можливо, це не пов’язано, але подібна помилка з’являється під час оновлення postgresдо основної версії за допомогою brew; використовуючи brew info postgresqlвиявлене це, що допомогло:

To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database

4
Це спрацювало для мене, коли їхав з 11 по 12 на
Каталіну

1
Працював і для мене
порожні стіни

15

Ось мій шлях:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm /usr/local/var/postgres/postmaster.pid
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

1
Це спрацювало для мене, коли не було зроблено жодної іншої зупинки та запуску / перезапуску / перевстановлення Postgres з використанням домашньої мови. Дякуємо @ smartworld-dm
Брэдлі

1
Це душа, до якої я завжди повертаюся. Я можу додати псевдонім, що під час запуску fix-my-postgresqlвін виконає це :)
Tomas K

1
Будь-яка ідея, чому я повинен це робити щоразу, коли перезавантажую комп'ютер?
Стефано

11

якщо ваше postmaster.pidпішло, і ви не можете перезапустити чи що-небудь, зробіть це:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

як пояснено тут спочатку


8

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

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. Це хороший спосіб бачити ваші БД Postgres як гарні таблиці даних

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


1
Ключовим тут є додавання Postgres до вашого шляху (крок 2). Це мені допомогло. Якщо ви встановили Postgres за допомогою Homebrew, ви можете додати його до свого шляху, додавши наступний рядок у свій .bash_profile: export PATH='/usr/local/Cellar/postgresql/9.4.1/bin/':$PATH- Майте на увазі, що номер версії може бути іншим.
Тіна

7

Ця проблема має багато джерел, а отже, багато відповідей. Я пережив кожного з них.

1) Якщо у вас є якась збійка, видалення файлу /usr/local/var/postgres/postmaster.pid, ймовірно, потрібне, оскільки postgres, можливо, неправильно обробив його. Але переконайтесь, що жоден процес не працює.

2) Крейг Рінгер в інших публікаціях вказував, що вбудованість PostgreSQL від Apple призводить до проблем з встановленням gg gg. Налаштування змінної середовища PATH є рішенням.

3) Ще одне рішення - видалити та встановити дорогоцінний камінь. Також може знадобитися оновлення заварки.

Якщо ви натрапите на цю посаду, якщо зможете точно визначити одне з джерел, ви заощадите час ...


3
Я радий, що опублікував це. Ще один збій і відповідь можна отримати досить швидко ...
Джеронім

6

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


5

Я зіткнувся з подібним питанням, тут я вирішив це питання, як показано нижче.

Насправді процес постгреси мертвий, щоб побачити статус постгресів, виконайте наступну команду

sudo /etc/init.d/postgres status

Він скаже, що процес мертвий - просто запустіть процес

sudo /etc/init.d/postgres start

Дякую за відповідь, ваша відповідь допомогла мені вирішити ту саму проблему з деякими модифікаціями: sudo /etc/init.d/postgresql start
Pravitha V

4

Це сталося зі мною після того, як мій Mac (High Sierra) замерз, і мені довелося перезапустити його вручну (натисніть і утримуйте кнопку живлення). Все, що мені потрібно було зробити, щоб виправити це, було зробити чистий перезапуск.


3

Моя проблема закінчилася тим, що я використовував Gas Mask (менеджер файлів хостів для Mac), і у мене не було запису для localhost у файлі хостів, який я використовував.

Я додав:

127.0.0.1 localhost

І це вирішило мою проблему.


3

Я не зовсім впевнений, чому, але моя програма Postgres трохи закрутилася, і деякі файли були видалені, внаслідок чого виявляється помилка OP.

Незважаючи на те, що я в змозі запускати такі команди, як brew service retart postgresі бачити належні повідомлення, ця помилка зберігалася.

Я переглянув документацію постгресу і виявив, що мій файл /usr/local/var/postgresповністю порожній. Тож я запустив таке:

initdb /usr/local/var/postgres

Здається, деякі налаштування відбулися з цією командою.

Тоді він попросив мене запустити це:

postgres -D /usr/local/var/postgres

І це сказав мені, що файл postmaster.pid вже існує.

Мені просто потрібно було знати, чи зможе brew підібрати конфігурації, які я щойно запустив, тому я перевірив це.

ls /usr/local/var/postgres

Це показало мені файл postmaster.pid. Потім я це зробив brew services stop postgresql, і файл postmaster.pid зник. Потім я brew services start postgresqlі VIOLA файл знову з’явився.

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

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

Сподіваюсь, це допомагає! Читання документів postgres мені дуже допомогло. Я ненавиджу читати відповіді на кшталт "Вставити це в нього працює!" тому що я не знаю, що, до біса, і чому.


2

Причин цієї помилки багато, тому спочатку знайдіть свій файл журналу та перевірте його на наявність підказок. Це може бути /usr/local/var/log/postgres.logабо /usr/local/var/postgres/server.logабо , можливо , в інших місцях. Якщо ви встановили програму Homebrew, ви можете знайти її в ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist.


2

У мене було те саме питання. У більшості випадків проблема полягає в тому, що є файл, що залишився

/usr/local/var/postgres/postmaster.pid

що працює для більшості людей, але мій випадок був іншим - я спробував гуглювати цю проблему протягом останніх 3 годин, видалив postresql на OSX через brew, очистив базу даних, нічого не вийшло.

Нарешті, я помітив, що у мене виникла проблема із заварюванням, що коли я намагався встановити що-небудь, вона вискакувала:

Error: Permission denied @ rb_sysopen - /private/tmp/github_api_....

або щось подібне в кінці встановлення.

Я просто зробив, sudo chmod -R 777 /private/tmpі це, нарешті, працює!

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


1

Ідіть /var/log/ і бігайте з котом postgres.log Тут ви знайдете причину невдачі постгресів. Якщо це розумне завершення роботи, то, ймовірно, ваша icu4cверсія (C ++ бібліотека для Unicode) не є належною, з якою пов'язана postgres. Тому виконайте наступні команди.

brew upgrade brew cleanup Це має працювати;)


Можливо, доведеться бігти brew styleпісля цього, якщо brew cleanupзламається Homebrew.
olliezhu

0

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

Щойно я виявив, що ви можете використовувати наступні дві команди.

$ верх

Це покаже всі поточні дії з їх номерами. Коли ви знайдете postgres та пов’язаний з ним pid

$ kill pid_number


0

Щойно я отримав ту саму проблему, що і я поставив свою машину ( ubuntu) для оновлення, і помилка отримана нижче

Не вдалося підключитися до сервера: Немає такого файлу чи каталогу. Сервер працює локально та приймає з'єднання в сокеті домену Unix "/var/run/postgresql/.s.PGSQL.5432"?

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


0

SUPER NEWBIE ALERT: Я просто вивчаю розробку веб-сторінок і конкретний підручник, за яким я слідував, я маю встановити Postgres, але насправді не згадую, що я повинен запускати його також ... Як тільки я відкрив додаток Postgres, все було добре і денді.


0

@Jagdish Barabari відповідь дала мені підказку мені потрібно вирішити це. Виявляється, було встановлено дві версії postgresql, поки працювала лише одна. Очищення всіх файлів postgresql та перевстановлення останньої версії вирішили цю проблему для мене.


0

Я видалив / usr / lib з LD_LIBRARY_PATH, і він працював. Я працював у dockerfile postgres: alpine.

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