Serwer PostgreSQL nie zatrzymuje się

89

Mały problem z PostgreSQL w systemie Mac OS X 10.8.4. Przypadkowo zrobiłem, brew rm postgresql --forcegdy serwer postgres był uruchomiony. Po zainstalowaniu przy użyciu brew install postgresqli uruchomieniu pg_ctl -D /usr/local/var/postgres startotrzymuję:

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

kiedy uruchamiam "ps -ef | grep postgres" otrzymuję:

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

kiedy próbuję zatrzymać serwer za pomocą pg_ctl stop -D /usr/local/var/postgres -m fastlub pg_ctl -D /usr/local/var/postgres stop -miotrzymuję:

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

EDYTOWAĆ

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

Streszczenie server.log: https://gist.github.com/anonymous/6106182

Parker Hutchinson
źródło
1
Czy pg_ctl -D /usr/local/var/postgres stop -m immediateidzie dalej niż dwie pozostałe próby?
bma
To byłoby to samo, co uruchomienie pg_ctl -D /usr/local/var/postgres stop -mii tak, wszystko co otrzymuję to „Serwer się nie wyłącza”
Parker Hutchinson
Zgadłem, ale szybki rzut oka postgres --helpnie od razu pokazał flagę „m”.
bma
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 pracował dla mnie
Derk Jan Speelman

Odpowiedzi:

164

Miałem ten sam problem, pg_ctl: server does not shut down. Co więcej, ps auxwww | grep postgrespokazał , że postgres nie jest uruchomiony, podczas gdy pg_ctl -D /usr/local/var/postgres statuspokazał, że postgres jest uruchomiony. Ponowne uruchomienie komputera Mac nie pomogło, posunąłem się nawet do zresetowania SMC, ale to pytanie SO Q / A dało mi pomysł, czego szukać dalej: problemy z zaparzaniem.

Kierując się tym tokiem myślenia, znalazłem ten pomocny wpis na blogu , który sprowadzał się do następujących poleceń, które rozwiązały ten problem:

$ brew services list
$ brew services restart postgresql

Mam nadzieję, że to komuś pomoże.

Aktualizacja - nieznane polecenie: usługi

Po krótkiej analizie po jednym z komentarzy („Nieznane polecenie: usługi”), dowiedziałem się, że autorzy Homebrew zdecydowali się usunąć servicesz repozytorium, ponieważ nikt nie chce utrzymywać tego kodu.

Możesz przeczytać więcej na ten temat tutaj i tutaj (powiązane bilety na github).

Po dłuższym kopaniu znalazłem to repozytorium, które dodaje servicesna komputerach Mac.

Oto jak „wróciłem” 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

Oto kolejne sugerowane rozwiązanie: /apple/150300/need-help-using-homebrew-services-command . Sam tego nie sprawdziłem, więc nie wiem, czy i jak to działa.

Blisko
źródło
4
To dezaktualizuje tak wiele aliasów bash, które zgromadziłem przez lata, aby robić dokładnie to samo. Dobry wygląd!
Alex Kestner
2
@naturalc zaktualizował moją odpowiedź w odpowiedzi na Twój komentarz. powiedz mi, czy to działa dla Ciebie.
Neara
1
Rozwiązał problem za mnie. Dzięki!
TotoroTotoro
Dla każdego Szyny użytkownikom tam, starałem Postgresa polecenia zatrzymania poprzez zwykłej prowizji, bundle exec rake pg:stop. Ale to nie działało, prowadząc do pg_ctl: server does not shut down. To obejście brew services restart postgresqlzadziałało dla mnie. 👌
zbeat
Dzięki! Nie mogłem sobie wyobrazić, że w rzeczywistości była to usługa homebrew. Niezłe!
Adrian Grzywaczewski
57

$ brew services list

$ brew services stop postgresql

Zatrzymywanie postgresql, ale może to chwilę potrwać → Pomyślnie zatrzymano postgresql(etykieta: homebrew.mxcl.postgresql)


źródło
2
Próbowałem zatrzymać pg_ctl ... stopsię bez skutku. Gdy uruchomiłem usługi parzenia stop postgresql, mój pg_ctl ... stop działa teraz zgodnie z oczekiwaniami. Nie wiem jak, ale cieszę się, że to rozwiązało problem!
Iggy
Musiałem dodać z nim wersję. brew services stop postgresql@10
Ivor Scott
12

Miałem podobny problem. Zapomniałem, że kilka dni temu zintegrowałem „lunchy” i używałem go jako wrappera launchctl do inicjowania plist ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plistpodczas uruchamiania. pg_ctl nie był skuteczny z powodu następującego wiersza kodu <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>

Próba bezpośredniego zabicia procesu nie zadziałała, ponieważ musiałem zwolnić plik plist.

    launchctl unload homebrew.mxcl.postgresql.plist
user3155603
źródło
Zwróć uwagę, że plik .plist może mieć inną nazwę. W moim przypadku tak było homebrew.mxcl.postgresql92.plist. Sprawdź się.
MCP
12

Miałem ten sam problem ... usunięcie agenta uruchamiania rozwiązało problem za mnie:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Max Bentata
źródło
10

Obejrzałem ten błąd za pomocą polecenia

pg_ctl stop -m immediate

pg_ctl start

Nie musiałem w ten sposób rozładowywać plista.

Elliott Harrison
źródło
5
Dostaję pg_ctl: nie określono katalogu bazy danych i zmienna środowiskowa PGDATA nieustawiona
SuperUberDuper
1
otrzymuję ten sam błąd: nie określono katalogu bazy danych i zmienna środowiskowa PGDATA nie została ustawiona
jjj
2
@SuperUberDuper Należy dodać -D i określić lokalizację bazy danych. Na przykład: pg_ctl stop -m natychmiastowe -D. „.” oznacza bieżący katalog, zakładając, że znajdujesz się w katalogu bazy danych
Hatzil,
8

okazuje się, że mój brew.plist for postgres musiał zostać wyładowany i usunięty w ~ / Library / LaunchAgents /. Po restarcie wszystko jest w porządku ... Pytanie zamykające.

Parker Hutchinson
źródło
7
proszę rozwinąć to
SuperUberDuper
7

W przypadku polegania na PostgreSQL zainstalowanym przez brew, następujące polecenie działało w celu wyłączenia go.

> brew services stop postgresql

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

Jak wspomniano w innej odpowiedzi, przeglądanie listy procesów i zabijanie czegokolwiek związanego z postgresem nie działa.

ps aux | grep postgres
kill $PID
Peter Lustig
źródło
0

Nie postgreszacząłem przezbrew services , więc nie mogłem tego zatrzymać w ten sposób.

To zadziałało.

$ 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

Użyj -Dparametru od góry.

$ pg_ctl stop -D "/Users/username/Library/Application Support/Postgres/var-9.6"
M3RS
źródło