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.
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.
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:
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.
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.
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