web-dev-qa-db-fra.com

Le fichier de verrouillage FATAL ERROR "postmaster.pid" existe déjà

J'ai récemment installé PostGIS sur mon Mac (El Capitan 10.11.4, Postgres est la version 9.5.1) en utilisant Homebrew, et je suis ces instructions - http://morphocode.com/how-to-install- postgis-sur-mac-os-x /

Lorsque j'essaie de démarrer Postgres en utilisant

pg_ctl -D /usr/local/var/postgres start 

J'obtiens l'erreur suivante:

$ FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 280) running in data directory "/usr/local/var/postgres"?

J'ai donc passé quelques heures à chercher comment résoudre ce problème, mais en vain.

Notamment, j'ai essayé de tuer le PID comme recommandé dans une réponse sur Superuser - https://superuser.com/questions/553045/fatal-lock-file-postmaster-pid-already-exists- ( dans le cas ci-dessus, j'ai exécuté kill 208), mais dès que j'ai essayé de redémarrer Postgres,

J'ai eu la même erreur, mais avec un numéro PID différent. J'ai vu quelques personnes recommander de supprimer le fichier postmaster.pid, mais je pense que je devrais peut-être l'enregistrer en dernier recours ...

Certes, une partie de la raison pour laquelle je ne sais pas comment résoudre ce problème est que je ne suis pas vraiment clair sur ce qu'est même le maître de poste - je commence tout juste à en apprendre davantage sur tout cela.

Passer dans une base de données Postgres via la commande psql db_name Fonctionne très bien, pour ce que ça vaut.

18
skwidbreth

Postmaster est le principal processus PostgreSQL. Vous essayez de démarrer PostgreSQL qui est déjà en cours d'exécution (et vous vous dites que vous pouvez vous y connecter). Ignorez simplement cette étape de votre processus.

4
Jakub Kania

TL; DR : Puisque vous pouvez vous connecter à la base de données, vous n'avez pas besoin de redémarrer le serveur - il est déjà en cours d'exécution.


pg_ctl est utilisé pour contrôler le serveur PostgreSQL. Puisque votre serveur est déjà démarré, votre commande:

pg_ctl -D /usr/local/var/postgres start

Renvoie une erreur indiquant qu'il y a un verrou sur postmaster.pid - ce qui est vrai car il existe déjà un serveur fonctionnant sous ce PID.


Il y a deux façons:

  1. La manière la plus élémentaire - ignorez cette étape, votre serveur est déjà en cours d'exécution !
  2. Exécution d'une opération inutile - arrêt du serveur, puis redémarrage.

Vous pouvez arrêter votre serveur de faire:

pg_ctl -D /usr/local/var/postgres stop

Pour que vous n'ayez plus le verrou sur postmaster et que vous puissiez utiliser votre commande pour le redémarrer.

19

Publier ceci au cas où cela aiderait quelqu'un d'autre:

J'avais ce même problème que l'OP après un redémarrage dur lorsque mon ordinateur portable s'est écrasé. Ce qui m'a aidé, c'est d'exécuter la commande suivante pour voir quel PID était associé à postmaster.pid:

cat /usr/local/var/postgres/postmaster.pid

Le premier numéro qui apparaît sera le PID. En regardant dans le moniteur d'activité, j'ai pu voir que Postgres était en cours d'exécution, mais sans un numéro PID correspondant à celui indiqué.

Au lieu des étapes décrites dans la réponse référencée sur Superutilisateur, j'ai redémarré mon ordinateur portable correctement, puis ouvert Terminal et exécuté

brew services restart postgresql

Cela a fonctionné sans avoir à supprimer postmaster.pid, que j'ai vu quelques autres articles recommander. Parfois, ce sont les solutions simples qui fonctionnent.

12
ludditedev

Cela m'arrive souvent dans OSx, lorsque mon système s'arrête de façon inattendue.

Vous pouvez simplement supprimer le fichier postmaster.pid.

cd Library/Application Support/Postgres/var-{postgres-version}

et supprimez le fichier postmaster.pid

redémarrez Postgres en utilisant cette commande

pg_ctl -D /usr/local/var/postgres restart
5
Sobin Sunny