Le serveur PostgreSQL ne s'arrête pas

87

Avoir un petit problème avec PostgreSQL sur Mac OS X 10.8.4. Je l'ai fait accidentellement brew rm postgresql --forcependant que le serveur postgres fonctionnait. Lorsque j'ai installé brew install postgresqlet exécuté, pg_ctl -D /usr/local/var/postgres startj'obtiens:

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

quand je lance "ps -ef | grep postgres" j'obtiens:

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

quand j'essaye d'arrêter le serveur avec pg_ctl stop -D /usr/local/var/postgres -m fastou pg_ctl -D /usr/local/var/postgres stop -mij'obtiens:

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

ÉDITER

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

Contenu essentiel de server.log: https://gist.github.com/anonymous/6106182

Parker Hutchinson
la source
1
Est-ce pg_ctl -D /usr/local/var/postgres stop -m immediateque ça va plus loin que les deux autres tentatives?
bma le
Ce serait la même chose que de courir pg_ctl -D /usr/local/var/postgres stop -miet ouais tout ce que j'obtiens est "Le serveur ne s'arrête pas"
Parker Hutchinson
Je l'ai deviné, mais un rapide coup d'œil à postgres --helpn'a pas immédiatement montré le drapeau "m".
bma le
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 a travaillé pour moi
Derk Jan Speelman

Réponses:

161

Avait même question, pg_ctl: server does not shut down. En outre, ps auxwww | grep postgresn'a montré aucun postgres en cours d'exécution, tout en pg_ctl -D /usr/local/var/postgres statusmontrant que postgres est en cours d'exécution. Le redémarrage de mon mac n'a pas aidé, je suis même allé jusqu'à réinitialiser SMC, mais ce SO Q / R m'a donné une idée de ce qu'il faut rechercher ensuite: les problèmes de brassage.

Suite à cette réflexion, j'ai trouvé cet article de blog utile , qui se résumait aux commandes suivantes qui ont résolu ce problème pour moi:

$ brew services list
$ brew services restart postgresql

J'espère que cela aidera quelqu'un.

Mise à jour - Commande inconnue: services

Après un peu d'enquête suite à l'un des commentaires ('Commande inconnue: services'), j'ai découvert que les auteurs de Homebrew avaient décidé de retirer servicesdu dépôt, car personne ne voulait maintenir ce code.

Vous pouvez en savoir plus ici et ici (tickets github associés).

Après quelques recherches supplémentaires, j'ai trouvé ce repo qui s'ajoute servicessur les macs.

C'est ainsi que j'ai 'retourné' 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

Voici une autre solution suggérée: /apple/150300/need-help-using-homebrew-services-command . Je ne l'ai pas vérifié moi-même, alors je ne sais pas si et comment cela fonctionne.

Près d'un
la source
4
Cela rend obsolète tant d'alias de bash que j'ai accumulés au fil des ans pour faire exactement la même chose. Bonne apparence!
Alex Kestner
2
@naturalc a mis à jour ma réponse en réponse à votre commentaire. dites-moi si cela fonctionne bien pour vous.
Neara
1
Résolu le problème pour moi. Merci!
TotoroTotoro
Pour tout Rails utilisateurs là - bas, je tentais Postgres d'arrêt via la commande habituelle Rake, bundle exec rake pg:stop. Mais cela ne fonctionnait pas, menant à pg_ctl: server does not shut down. La solution de contournement a brew services restart postgresqlfonctionné pour moi. 👌
zbeat
Merci mec! Je ne pouvais pas comprendre que c'était en fait un service homebrew en cours d'exécution. Joli!
Adrian Grzywaczewski
54

$ brew services list

$ brew services stop postgresql

Arrêt postgresql, mais cela peut prendre un certain temps → Arrêt réussi postgresql(label: homebrew.mxcl.postgresql)


la source
2
J'ai essayé de m'arrêter pg_ctl ... stopsans succès. Une fois que j'ai exécuté les services de brassage stop postgresql, mon pg_ctl ... stop fonctionne à nouveau comme prévu maintenant. Je ne sais pas comment, mais je suis heureux que cela ait résolu le problème!
Iggy
J'avais besoin d'ajouter la version avec. brew services stop postgresql@10
Ivor Scott
12

J'ai eu un problème similaire. J'avais oublié que j'avais intégré «lunchy» il y a quelques jours et que je l'utilisais comme un wrapper launchctl pour lancer plist ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plistau démarrage. pg_ctl n'était pas efficace à cause de la ligne de code suivante <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>

Essayer de tuer le processus directement n'a pas fonctionné parce que j'avais besoin de décharger le plist.

    launchctl unload homebrew.mxcl.postgresql.plist
user3155603
la source
Notez que le fichier .plist peut ne pas avoir exactement le même nom. Dans mon cas, c'était le cas homebrew.mxcl.postgresql92.plist. Vérifiez vous-même.
MCP
12

J'avais le même problème ... la suppression de l'agent de lancement a résolu le problème pour moi:

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

J'ai contourné cette erreur en utilisant la commande

pg_ctl stop -m immediate

pg_ctl start

Je n'avais pas besoin de décharger le plist de cette façon.

Elliott Harrison
la source
5
Je reçois pg_ctl: aucun répertoire de base de données spécifié et la variable d'environnement PGDATA n'est pas définie
SuperUberDuper
1
obtenir la même erreur: aucun répertoire de base de données spécifié et variable d'environnement PGDATA non définie
jjj
2
@SuperUberDuper Vous devez ajouter -D et spécifier l'emplacement de la base de données. Par exemple: pg_ctl stop -m immédiat -D. "." représente le répertoire actuel, en supposant que vous êtes dans le répertoire de la base de données
Hatzil
8

s'avère que mon brew.plist pour postgres devait être déchargé et supprimé dans ~ / Library / LaunchAgents /. Après un redémarrage, tout va bien ... question de clôture.

Parker Hutchinson
la source
7
veuillez développer ceci
SuperUberDuper
7

Lors de l'utilisation de PostgreSQL installé par brew, la commande suivante fonctionnait pour l'arrêter.

> brew services stop postgresql

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

Comme mentionné dans une autre réponse, parcourir la liste des processus, puis tuer tout ce qui est lié à postgres ne fonctionne pas .

ps aux | grep postgres
kill $PID
Peter Lustig
la source
0

Je n'avais pas postgrescommencé via brew services, donc je ne pouvais pas l'arrêter de cette façon.

Cela a fonctionné.

$ 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

Utilisez le -Dparamètre d'en haut.

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