Сервер PostgreSQL не остановится

87

Небольшая проблема с PostgreSQL в Mac OS X 10.8.4. Я случайно сделал это brew rm postgresql --forceпри работающем сервере postgres. Когда я установил using brew install postgresqlи запустил, pg_ctl -D /usr/local/var/postgres startя получаю:

pg_ctl: another server might be running; trying to start server anyway
server starting
FATAL:  lock file "postmaster.pid" already exists                                                                       
HINT:  Is another postmaster (PID 752) running in data directory "/usr/local/var/postgres"?

когда я запускаю "ps -ef | grep postgres", я получаю:

501   752   235   0 12:42PM ??         0:00.01 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log
501   754   752   0 12:42PM ??         0:00.00 postgres: checkpointer process       
501   755   752   0 12:42PM ??         0:00.34 postgres: writer process       
501   756   752   0 12:42PM ??         0:00.02 postgres: wal writer process       
501   757   752   0 12:42PM ??         0:00.01 postgres: autovacuum launcher process       
501   758   752   0 12:42PM ??         0:00.01 postgres: stats collector process       
501   945   452   0 12:58PM ttys000    0:00.00 grep postgres

когда я пытаюсь остановить сервер pg_ctl stop -D /usr/local/var/postgres -m fastили pg_ctl -D /usr/local/var/postgres stop -miполучаю:

waiting for server to shut down........................................... Failed
pg_ctl: server does not shut down

РЕДАКТИРОВАТЬ

which pg_ctl
/usr/local/bin/pg_ctl
pg_ctl --version
pg_ctl (PostgreSQL) 9.2.4

Суть server.log: https://gist.github.com/anonymous/6106182

Паркер Хатчинсон
источник
1
Есть ли pg_ctl -D /usr/local/var/postgres stop -m immediateчто-то большее, чем две другие попытки?
bma
Это было бы то же самое, что и работа, pg_ctl -D /usr/local/var/postgres stop -miи да, все, что я получаю, это «Сервер не выключается»
Паркер Хатчинсон
Я догадался, но беглый взгляд postgres --helpне сразу показал флаг «м».
bma
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 работал у меня
Дерк Ян

Ответы:

162

Была такая же проблема pg_ctl: server does not shut down. Кроме того, не было ps auxwww | grep postgresпоказано, что postgres запущен, а pg_ctl -D /usr/local/var/postgres statusпоказал, что postgres запущен. Перезагрузка моего Mac не помогла, я даже дошел до сброса SMC, но этот SO Q / A дал мне идею, что искать дальше: проблемы с пивом.

Следуя этой мысли, я нашел этот полезный пост в блоге , который сводился к следующим командам, которые решили эту проблему для меня:

$ brew services list
$ brew services restart postgresql

Надеюсь, это кому-то поможет.

Обновление - Неизвестная команда: услуги

После небольшого расследования после одного из комментариев («Неизвестная команда: сервисы») я обнаружил, что авторы Homebrew решили удалить его servicesиз репозитория, поскольку никто не хочет поддерживать этот код.

Вы можете прочитать об этом здесь и здесь (соответствующие билеты на github).

Еще немного покопавшись, я нашел это репо, которое добавляет servicesна Mac.

Вот как я «вернулся» services:

~ » brew tap gapple/services
~ » brew services
usage: [sudo] brew services [--help] <command> [<formula>]

Small wrapper around `launchctl` for supported formulae, commands available:
   cleanup Get rid of stale services and unused plists
   list    List all services managed by `brew services`
   restart Gracefully restart selected service
   start   Start selected service
   stop    Stop selected service

Options, sudo and paths:

  sudo   When run as root, operates on /Library/LaunchDaemons (run at boot!)
  Run at boot:  /Library/LaunchDaemons
  Run at login: /Users/user/Library/LaunchAgents

Вот еще одно предлагаемое решение: /apple/150300/need-help-using-homebrew-services-command . Сам не проверял, поэтому не знаю, работает ли и как.

Neara
источник
4
Это устарело так много псевдонимов bash, которые я накопил за годы для того, чтобы делать то же самое. Молодец!
Alex Kestner
2
@naturalc обновил мой ответ в ответ на ваш комментарий. скажите мне, подходит ли вам это.
Neara 04
1
Решил проблему за меня. Благодарность!
TotoroTotoro
Для любого Рельсы пользователей там, я пытаюсь стопорные Postgres с помощью обычной команды Rake, bundle exec rake pg:stop. Но это не сработало, что привело к pg_ctl: server does not shut down. Обходной путь brew services restart postgresqlсработал для меня. 👌
zbeat 06
Спасибо чувак! Я не мог понять, что это действительно запущенная служба домашнего пивоварения. Хороший!
Adrian Grzywaczewski 05
54

$ brew services list

$ brew services stop postgresql

Остановка postgresql, но это может занять некоторое время → Успешно остановлено postgresql(label: homebrew.mxcl.postgresql)


источник
2
Пытался остановиться pg_ctl ... stopбезрезультатно. Как только я запустил brew services stop postgresql, мой pg_ctl ... stop теперь снова работает, как ожидалось. Не знаю, как, но я рад, что это помогло!
Игги
Мне нужно было добавить версию с ним. brew services stop postgresql@10
Айвор Скотт,
12

У меня была аналогичная проблема. Я забыл, что интегрировал «обеденный» несколько дней назад и использовал его как оболочку launchctl для ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plistзапуска plist при запуске. pg_ctl не работал из-за следующей строки кода <key>KeepAlive<key>:

      <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     3 <plist version="1.0">
     4 <dict>
     5   <key>KeepAlive</key>
     6   <true/>
     7   <key>Label</key>
     8   <string>homebrew.mxcl.postgresql</string>
     9   <key>ProgramArguments</key>
    10   <array>
    11     <string>/usr/local/opt/postgresql/bin/postgres</string>
    12     <string>-D</string>
    13     <string>/usr/local/var/postgres</string>
    14     <string>-r</string>
    15     <string>/usr/local/var/postgres/server.log</string>
    16   </array>
    17   <key>RunAtLoad</key>
    18   <true/>
    19   <key>WorkingDirectory</key>
    20   <string>/usr/local</string>
    21   <key>StandardErrorPath</key>
    22   <string>/usr/local/var/postgres/server.log</string>
    23 </dict>
    24 </plist>

Попытка убить процесс напрямую не сработала, потому что мне нужно было выгрузить plist.

    launchctl unload homebrew.mxcl.postgresql.plist
user3155603
источник
Обратите внимание, что файл .plist может иметь другое имя. В моем случае так и было homebrew.mxcl.postgresql92.plist. Проверь себя.
MCP
12

У меня была такая же проблема ... удаление агента запуска решило проблему для меня:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Макс Бентата
источник
9

Я обошел эту ошибку с помощью команды

pg_ctl stop -m immediate

pg_ctl start

Мне таким образом не нужно было выгружать plist.

Эллиот Харрисон
источник
5
Я получаю pg_ctl: каталог базы данных не указан, а переменная среды PGDATA не установлена
SuperUberDuper
1
получение той же ошибки: каталог базы данных не указан и переменная среды PGDATA не
задана
2
@SuperUberDuper Вы должны добавить -D и указать расположение базы данных. Например: pg_ctl stop -m немедленная -D. "." означает текущий каталог, при условии, что вы находитесь в каталоге базы данных
Hatzil
8

Оказывается, мой brew.plist для postgres нужно выгрузить и удалить в ~ / Library / LaunchAgents /. После перезагрузки все хорошо ... закрывающий вопрос.

Паркер Хатчинсон
источник
7
пожалуйста, расширите это
SuperUberDuper
7

При использовании PostgreSQL, установленного brew, следующая команда сработала для его выключения.

> brew services stop postgresql

stopping `postgresql`... (might take a while)
==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)

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

ps aux | grep postgres
kill $PID
Питер Люстиг
источник
0

Я не postgresначинал через brew services, поэтому не мог остановить это так.

Это сработало.

$ ps -ef | grep postgres
501   547     1   0  2:07pm ??         0:00.29 /Applications/Postgres.app/Contents/Versions/9.6/bin/postgres -D /Users/username/Library/Application Support/Postgres/var-9.6 -p 5432

Используйте параметр -Dсверху.

$ pg_ctl stop -D "/Users/username/Library/Application Support/Postgres/var-9.6"
M3RS
источник