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

Причина этого состояла в том, что мой macbook полностью завис из-за не связанной с этим проблемы, и мне пришлось выполнить полную перезагрузку с помощью кнопки питания. После перезагрузки я не смог запустить Postgres из-за этой ошибки.


1
В качестве проверки работоспособности убедитесь, что у вас на компьютере работает PG
Jbur43

1
Когда вы оставляете ответ, пожалуйста, попытайтесь объяснить, ПОЧЕМУ это происходит, или как работает система Postgres, чтобы мы не просто пытались что-то случайное.
Ник Рез

6
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 работал на меня
Дерк Ян

brew, переустановите postgresql, это решило мою проблему
Ajay Kumar

Ответы:


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. Это решило проблему, и я смог перезапустить.

Итак, кажется, что мой MacBook завис и был жестко перезагружен, что заставило Postgres думать, что его процессы все еще работают даже после перезагрузки. Удаление этого файла разрешено. Надеюсь, что это помогает другим! У многих людей есть похожие проблемы, но большинство ответов были связаны с правами доступа к файлам, тогда как в моем случае все было иначе.


9
надеюсь, этот ответ в конечном итоге поможет кому-то еще, и спасибо человеку, который проголосовал за него. Несмотря на то, что модератор отметил этот вопрос как дубликат, он уникален и полезен. Спасибо, переполнение стека за удивительный сайт и экспертов здесь для обмена!
FireDragon

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

21
Отличный ответ. Спасибо за публикацию всего процесса, а не только потенциально разрушительной команды!
Dojosto

3
Согласовано. Ответ о postmaster.pid хорош, но каждый шаг процесса выяснения, работает ли postgres и где он работает, неоценим . Спасибо!
Клинтон

11
Мой журнал postgres на macos был на /usr/local/var/log/postgres.log.
ryantuck

172

Ничто из вышеперечисленного не помогло мне. Мне пришлось переустановить Postgres следующим образом:

  • Удалите postgresql с помощью brew: brew uninstall postgresql
  • brew doctor (исправить все, что здесь)
  • brew cleanup
  • Удалить все папки Postgres:

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

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

4
Работал на меня, но мне не нужно было удалять фактическую базу данных и у меня не было папки в Application Support. Я думаю, что дело в том, что некоторые элементы brew имели битые символические ссылки при установке postgres. Исправление их и установка postgres снова решили проблему. Спасибо!
Kulbi

2
Ни этот, ни главный ответ не работал для меня, пока я тоже не побежалbrew postgresql-upgrade-database
ErikAGriffin

Они работали для меня, за исключением того, что мне не нужно было удалять старые данные.
Амаль Антоний

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

85

Если вы используете MacOS и установили postgres через homebrew, попробуйте перезапустить его с

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 на Каталине
nzajt

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 с использованием homebrew. Спасибо @ smartworld-dm
Брэдли

1
Это та душа, к которой я всегда возвращаюсь. Я мог бы добавить псевдоним, который при запуске fix-my-postgresqlбудет выполнять это :)
Томас К

1
Любая идея, почему я должен делать это каждый раз, когда я перезагружаю свой компьютер?
Стефано

11

если ваш postmaster.pidушел, и вы не можете перезапустить или что-то еще, сделайте это:

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

как объяснено здесь изначально


8

Привет, мир :)
Лучший, но странный способ для меня - делать следующие вещи.

1) Скачать postgres93.app или другую версию. Добавьте это приложение в папку / Applications /.

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

экспорт PATH = / Приложения / Postgres93.app / Содержание / MacOS / bin /: $ 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) Крейг Рингер в других публикациях указал, что связывание Apple postgreSQL приводит к проблемам с установкой pg gem. Установка переменной среды PATH - это решение.

3) Другое решение, это удалить и переустановить драгоценный камень. Также может понадобиться обновление варева.

Если вы наткнетесь на этот пост, если вы сможете точно определить один из источников, вы сэкономите время ...


3
Я рад, что написал это. Еще один сбой и ответ может быть получен довольно быстро ...
Джером

6

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


5

Я столкнулся с подобной проблемой здесь, я решил эту проблему, как показано ниже.

На самом деле процесс postgres мертв, чтобы увидеть состояние postgres, выполните следующую команду

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 (файловый менеджер hosts для Mac), и у меня не было записи для localhost в файле hosts, который я использовал.

Я добавил:

127.0.0.1 localhost

И это решило мою проблему.


3

Я не совсем уверен, почему, но моя установка Postgres была немного испорчена, и некоторые файлы были удалены, что привело к ошибке OP.

Несмотря на то, что я могу запускать команды вроде brew service retart postgresи видеть правильные сообщения, эта ошибка сохранилась.

Я просмотрел документацию 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, файл появился снова.

Затем я запустил свое приложение, которое фактически нашло сервер, однако мои базы данных, похоже, исчезли.

Хотя я знаю, что они могут вообще не исчезнуть - новая инициализация, которую я сделал, могла создать новую data_area, а на старую не указывать. Я должен был бы посмотреть, где это и указать на это, или просто снова создать свои базы данных.

Надеюсь это поможет! Чтение документации 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, очистил базу данных, ничего не помогло.

Наконец, я заметил, что у меня возникла проблема с brew, которая всякий раз, когда я пытался что-либо установить, высовывалась:

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

или что-то вроде этого в конце установки.

Я просто сделал, sudo chmod -R 777 /private/tmpи это, наконец, работает!

Я записываю это, потому что это может быть решением для кого-то другого


1

Перейти к /var/log/ и запустить кошку postgres.log Здесь вы найдете причину сбоя postgres. Если это умное завершение работы, то, вероятно, ваша icu4cверсия (библиотека C ++ для Unicode) неверна, что связано с postgres. Итак, выполните следующие команды.

brew upgrade brew cleanup Это должно работать;)


Возможно, придется бежать brew styleпотом, если brew cleanupсломается Homebrew.
оллиежу

0

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

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

$ сверху

Это покажет все текущие действия с их номерами pid. Когда вы найдете 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.