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


имея немного проблемы с PostgreSQL на Mac OS X 10.8.4. Я случайно сделал brew rm postgresql --force во время работы сервера postgres. Когда я установил с помощью 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

EDIT

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

7 57

7 ответов:

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

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

$ brew services list
$ brew services restart postgresql

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

обновить-неизвестная команда: services

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

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

еще немного покопавшись, я нашел этой РЕПО, что добавит services на маках.

вот как я 'вернулся'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

вот еще одно предлагаемое решение: https://apple.stackexchange.com/questions/150300/need-help-using-homebrew-services-command. не проверял его сам, так что не знаю, если и как это работает.

$ brew services list

$ brew services stop postgresql

остановка postgresql, но это может занять некоторое время = = > Успешно остановлен postgresql (метка: домашнее.mxcl.postgresql)

у меня была аналогичная проблема. Я забыл, что я интегрировал "ланчи" несколько дней назад и использовал это как оболочка launchctl, чтобы инициировать plist ~/Library/LaunchAgents/homebrew.mxcl.postgresql.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

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

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

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

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

pg_ctl stop -m immediate

pg_ctl start

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

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

> brew services stop postgresql

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

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

ps aux | grep postgres
kill $PID