O servidor PostgreSQL não para

87

Tendo um pequeno problema com o PostgreSQL no Mac OS X 10.8.4. Eu acidentalmente fiz brew rm postgresql --forceenquanto o servidor postgres estava em execução. Quando instalei usando brew install postgresqle executei pg_ctl -D /usr/local/var/postgres start, recebo:

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

quando executo "ps -ef | grep postgres" recebo:

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

quando tento parar o servidor com pg_ctl stop -D /usr/local/var/postgres -m fastou pg_ctl -D /usr/local/var/postgres stop -miobtenho:

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

EDITAR

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

Síntese de server.log: https://gist.github.com/anonymous/6106182

Parker Hutchinson
fonte
1
Vai pg_ctl -D /usr/local/var/postgres stop -m immediatemais longe do que as outras duas tentativas?
bma
Isso seria o mesmo que correr pg_ctl -D /usr/local/var/postgres stop -mie sim, tudo que recebo é "O servidor não desliga"
Parker Hutchinson
Eu adivinhei isso, mas uma rápida olhada em postgres --helpnão mostrou imediatamente a bandeira "m".
bma
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 funcionou para mim
Derk Jan Speelman

Respostas:

162

Teve o mesmo problema pg_ctl: server does not shut down. Além disso, ps auxwww | grep postgresnão mostrou nenhum postgres em execução, enquanto pg_ctl -D /usr/local/var/postgres statusmostrou que o postgres está em execução. Reiniciar meu mac não ajudou, cheguei até a redefinir o SMC, mas esse SO Q / A me deu uma ideia do que procurar a seguir: problemas de fermentação.

Seguindo essa linha de pensamento, encontrei esta postagem de blog útil , que se resumia a seguir comandos que resolveram esse problema para mim:

$ brew services list
$ brew services restart postgresql

Espero que isso ajude alguém.

Atualizar - Comando desconhecido: serviços

Depois de um pouco de investigação seguindo um dos comentários ('Comando desconhecido: serviços'), descobri que os autores do Homebrew decidiram remover servicesdo repositório, visto que ninguém quer manter este código.

Você pode ler mais sobre isso aqui e aqui (tickets do github relacionados).

Depois de pesquisar mais um pouco, encontrei este repositório que adiciona servicesmacs.

É assim que eu 'retornei' 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

Aqui está outra solução sugerida: /apple/150300/need-help-using-homebrew-services-command . Não verifiquei sozinho, então não sei se e como funciona.

Perto de
fonte
4
Isso torna obsoletos muitos aliases de bash que acumulei ao longo dos anos para fazer exatamente a mesma coisa. Boa sorte!
Alex Kestner
2
@naturalc atualizou minha resposta em resposta ao seu comentário. diga-me se funciona bem para você.
Neara
1
Resolvido o problema para mim. Obrigado!
TotoroTotoro
Para qualquer usuário Rails lá fora, eu estava tentando parar o Postgres através do comando Rake usual bundle exec rake pg:stop,. Mas isso não estava funcionando, levando a pg_ctl: server does not shut down. A solução alternativa brew services restart postgresqlfuncionou para mim. 👌
zbeat de
Obrigado, cara! Eu não conseguia descobrir que era realmente um serviço caseiro em execução. Agradável!
Adrian Grzywaczewski,
54

$ brew services list

$ brew services stop postgresql

Parando postgresql, mas pode demorar um pouco → Parado com sucesso postgresql(rótulo: homebrew.mxcl.postgresql)


fonte
2
Tentei parar pg_ctl ... stopsem sucesso. Assim que executei o brew services stop postgresql, meu pg_ctl ... stop funciona como esperado novamente agora. Não sei como, mas estou feliz que isso tenha resolvido!
Iggy
Eu precisava adicionar a versão com ele. brew services stop postgresql@10
Ivor Scott
12

Eu tive uma questão semelhante. Eu tinha esquecido que integrei 'lunchy' há alguns dias e estava usando-o como um wrapper de launchctl para iniciar o plist ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plistna inicialização. pg_ctl não foi eficaz devido à seguinte linha de código <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>

Tentar encerrar o processo diretamente não funcionou porque precisei descarregar o plist.

    launchctl unload homebrew.mxcl.postgresql.plist
user3155603
fonte
Observe que o arquivo .plist pode não ter exatamente o mesmo nome. No meu caso foi homebrew.mxcl.postgresql92.plist. Verifique você mesmo.
MCP
12

Eu estava tendo o mesmo problema ... remover o agente de lançamento resolveu o problema para mim:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Max Bentata
fonte
9

Eu contornei este erro usando o comando

pg_ctl stop -m immediate

pg_ctl start

Não precisei descarregar o plist dessa maneira.

Elliott Harrison
fonte
5
Recebo pg_ctl: nenhum diretório de banco de dados especificado e a variável de ambiente PGDATA não definida
SuperUberDuper
1
obtendo o mesmo erro: nenhum diretório de banco de dados especificado e variável de ambiente PGDATA não definida
jjj
2
@SuperUberDuper Você deve adicionar -D e especificar a localização do banco de dados. Por exemplo: pg_ctl stop -m imediato -D. "." representa o diretório atual, supondo que você esteja no diretório do banco de dados
Hatzil
8

Acontece que meu brew.plist para postgres precisava ser descarregado e removido em ~ / Library / LaunchAgents /. Depois de reiniciar, está tudo bem ... pergunta final.

Parker Hutchinson
fonte
7
por favor, expanda isto
SuperUberDuper
7

Ao confiar no PostgreSQL instalado no brew, o seguinte comando funcionou para desligá-lo.

> brew services stop postgresql

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

Conforme mencionado em outra resposta, pesquisar a lista de processos e, em seguida, eliminar qualquer coisa relacionada ao postgres não funciona.

ps aux | grep postgres
kill $PID
Peter Lustig
fonte
0

Eu não postgrescomecei via brew services, então não poderia parar dessa forma.

Isso funcionou.

$ 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

Use o -Dparâmetro acima.

$ pg_ctl stop -D "/Users/username/Library/Application Support/Postgres/var-9.6"
M3RS
fonte