БД Postgres не запускается в Mac OSX: ОШИБКА говорит: подключения к сокету домена Unix [закрыто]

81

Я установил Postgresql, а затем запустил кучу приложений rails на моем локальном Mac OSX Mountain Lion, создал базы данных и т. Д. Сегодня, через некоторое время, когда я запустил pgAdminIII и попытался запустить сервер базы данных, я получил эту ошибку:

введите описание изображения здесь

Быстрый гугл показал это пост. Более продолжительный просмотр указал на то, что может лежать какой-то файл postmaster.pid, который может быть основной причиной этого. Если я удалю это, все будет в порядке.

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

Где-то я читал, что перед удалением этого файла мне нужно выполнить эту команду:

  ps auxw | grep post

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

  AM               476   0.0  0.0  2423356    184 s000  R+    9:28pm   0:00.00 grep post

Так что теперь я, конечно, полностью запутался.

Так что я должен делать?

Вот часть моего журнала ошибок сервера postgres:

 FATAL:  lock file "postmaster.pid" already exists
 HINT:  Is another postmaster (PID 171) running in data directory "/usr/local/var/postgres"?

Postgresql все еще не запущен, по-прежнему возникает та же ошибка, и ничего не изменилось. Я слишком курица, чтобы удалять вещи, не проверяя SO.

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

благодаря

бандиткороль
источник
Во-первых, я не специалист. С учетом сказанного, похоже, ваша база данных не отключилась должным образом. Я бы удалил файл pid и попытался запустить базу данных.
fbynite
Да, это то, что я хочу сделать, но я где-то читал, что это может привести к необратимому повреждению базы данных, если при этом запущен pid. Не уверен, в чем дело
banditKing
@banditKing Никогда не нужно удалять postmaster.pid. Сервер удаляет его при запуске, если он недействителен (устарел), и это важно для защиты данных. Пожалуйста, объясните, как вы для начала установили PostgreSQL на свой компьютер - через установщик EnterpriseDB, homebrew, Postgres.app, что? Также упомяните версию PostgreSQL. Наконец, если вы явно добавите "localhost" к параметрам подключения в Pgadmin-III, это сработает? Если это так, то вас укусило действительно плохое решение Apple по упаковке, которое недавно приняла Apple ...
Крейг Рингер,
@CraigRinger, спасибо за разъяснения. Не помню, как устанавливал, это было довольно давно. Что я могу сделать? Или данные там - это просто тестовые данные, поэтому в худшем случае я могу удалить и переустановить. Есть какие-нибудь хорошие блоги / руководства о том, как это сделать правильно?
banditKing
1
@banditKing Пробовали перезагрузку? Вы можете определить, как вы установили, из этого: wiki.postgresql.org/wiki/Installers/Mac_OS_X . Похоже, вы использовали Homebrew. Если сервер PostgreSQL ошибочно не может удалить, postmaster.pidто вы можете удалить его после проверки отсутствия postgresзапущенных процессов, просто жизненно важно, чтобы вы были уверены, что на самом деле нет никаких процессов PostgreSQL. Однако отказ сервера от удаления устаревшего файла postmaster.pidкажется мне ошибкой.
Craig Ringer

Ответы:

193

Сегодня у меня была такая же проблема на Mac Sierra. В Mac Sierra вы можете найти postmaster.pidвнутри/Users/<user_name>/Library/Application Support/Postgres/var-9.6 . Удалите postmaster.pidи проблема будет исправлена.

r3b00t
источник
19
Удалено postmaster.pidв этом месте, и проблема устранена. Благодаря!
JLF
1
Здесь мне также нужно было найти postmaster.pidфайл, поскольку я использую Postgres.app
Ярсен
3
Для Postgres.app это то же самое: может быть, он находится здесь/Users/<user>/Library/Application\ Support/Postgres/var-10/postmaster.pid
Саймон Франзен
1
Я также использую Postgres.app под управлением v10. Если мой Mac неожиданно завершает работу во время работы Postgres, мне нужно удалить файл postmaster.pid при перезагрузке компьютера. Кто-нибудь знает, является ли это ожидаемым поведением приложения? Кажется странным, если задумано.
Александр
Перед удалением этого файла убедитесь, что процесс замедлен. Вы можете запустить cat postmaster.pidкаталог, чтобы заглянуть в него и указать, что вы не видите PID в чем-то вроде монитора активности. Пользовательский интерфейс Postgres предупредит вас об этом, но я подумал, что должен поместить его здесь, прежде чем люди волей-неволей поймут, как себя проверить. Также должно быть достаточно поискать postgresв мониторе активности и убить все, что связано, или просто перезагрузить систему, а затем удалить файл. Невыполнение этого может привести к повреждению базы данных 🔥
CTS_AE
42

Это может произойти, если база данных не закрылась правильно. Чтобы исправить это, просто удалите postmaster.pidфайл. Расположение зависит от вашей ОС:

MacOS:

 rm /Users/<user_name>/Library/Application\ Support/Postgres/var-9.6/postmaster.pid

или используя Postgres.app:

 rm /Users/<user>/Library/Application\ Support/Postgres/var-10/postmaster.pid

Linux:

 rm /usr/local/var/postgres/postmaster.pid
sqren
источник
2
Спасибо, это решение работает! После удаления postmaster.pidи запуска postgres -D /usr/local/var/postgresон замечает причину ошибки: «Система базы данных не была должным образом завершена; выполняется автоматическое восстановление»
Хоанг Ле
это решило мою проблему
Fabrice Yopa
Это работает. В моем случае файл pid не был удален из-за жесткой перезагрузки, поэтому пришлось просто создать его резервную копию.
George C
21

Сейчас у меня работает база данных.

Вот шаги, которые я предпринял:

  1. Я перезагрузил свой компьютер
  2. Я открыл терминал и побежал cd /
  3. Тогда я сделал ls -la
  4. Убедился, что я смогу добраться до MackintoshHD/usr/local/var/postgres
  5. Затем сделал ls -la
  6. Вот увидел файл postmaster.pid
  7. Я выполнил эту команду cp postmaster.pid ~/Desktop которая скопировала файл на свой рабочий стол. Мне нравится делать это, если я удаляю файлы. Если что-то не так, я могу вернуть его
  8. Затем я выполнил эту команду, чтобы удалить файл из каталога postgres rm -r postmaster.pid
  9. Я зашел в свой pgadmin3 gui и запустил его. и вуаля это сработало :)

Спасибо @Craig Ringer за его помощь

бандиткороль
источник
6
Мой был не в / usr / local / var / postgres, а в / Users / [myhome] / Library / Application Support / Postgres / var-9.5 / - последний каталог зависит от вашей версии, postmaster.pid был удален и работал как шарм, спасибо
Радек
4

Я использую Postgres.app, и у меня сработало следующее:

Я ввел команды в свой терминал ниже, предварительно указав папку Postgres и не используя "justin".

$declare -x PGDATA="/Users/justin/Library/Application Support/Postgres/var-9.4"

$pg_ctl restart -m immediate

Как объясняет Джастин в своем сообщении, результат после этого был:

ожидание завершения работы сервера ……………………………………………………… сбой pg_ctl: сервер не выключается

После повторного ввода команды:

$pg_ctl restart -m immediate

Это сработало, и я получил это сообщение:

pg_ctl: старый серверный процесс (PID: 373) кажется пропал, запускающий сервер в любом случае запускающий сервер LOG: система базы данных была прервана; последнее известное событие: 28-07-2015, 18:15:26 ЖУРНАЛ PDT: система базы данных не была завершена должным образом; выполняется автоматическое восстановление LOG: запись с нулевой длиной в 0 / 4F0F7A8 LOG: повтор не требуется LOG: система баз данных готова принимать соединения LOG: запущена программа запуска автоочистки

Источник

Эндрю Саутхард
источник