psql: impossible de se connecter au serveur: aucun fichier ou répertoire de ce type (Mac OS X)

247

Au redémarrage de mon Mac, j'ai eu l'erreur redoutée de Postgres:

psql: could not connect to server: No such file or directory
 Is the server running locally and accepting
 connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

La raison pour laquelle cela s'est produit est que mon macbook a complètement gelé en raison d'un problème non lié et j'ai dû faire un redémarrage dur à l'aide du bouton d'alimentation. Après le redémarrage, je n'ai pas pu démarrer Postgres à cause de cette erreur.

Dragon de feu
la source
1
Pour vérifier la santé mentale, assurez-vous que PG est en cours d'exécution sur votre machine
Jbur43
1
Lorsque vous laissez la réponse, essayez d'expliquer pourquoi cela se produit ou comment le système Postgres fonctionne afin que nous n'essayions pas tous au hasard.
Nick Res
6
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 a fonctionné pour moi
Derk Jan Speelman
brew réinstaller postgresql cela a résolu mon problème
Ajay Kumar

Réponses:

422

AVERTISSEMENT: si vous supprimez postmaster.pid sans vous assurer qu'aucun postgresprocessus ne vous exécute, cela pourrait corrompre définitivement votre base de données . (PostgreSQL devrait le supprimer automatiquement si le postmaster est sorti.).

SOLUTION: cela a résolu le problème - j'ai supprimé ce fichier, puis tout a fonctionné!

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

-

et voici comment j'ai compris pourquoi cela devait être supprimé.

  1. J'ai utilisé la commande suivante pour voir s'il y avait des processus PG en cours d'exécution. pour moi il n'y en avait pas, je n'ai même pas pu démarrer le serveur PG:

    ps auxw | grep post
  2. J'ai recherché le fichier .s.PGSQL.5432 qui était dans le message d'erreur ci-dessus. j'ai utilisé la commande suivante:

    sudo find / -name .s.PGSQL.5432 -ls

    cela ne montrait rien après avoir fouillé tout mon ordinateur donc le fichier n'existait pas, mais visiblement psql"le voulait" ou "pensait qu'il était là".

  3. J'ai jeté un œil aux journaux de mon serveur et j'ai vu l'erreur suivante:

    cat /usr/local/var/postgres/server.log

    à la fin du journal du serveur, je vois l'erreur suivante:

    FATAL:  pre-existing shared memory block (key 5432001, ID 65538) is still in use
    HINT:  If you're sure there are no old server processes still running, remove the shared memory block or just delete the file "postmaster.pid".
  4. En suivant les conseils du message d'erreur, j'ai supprimé le fichier postmaster.pid dans le même répertoire que server.log. Cela a résolu le problème et j'ai pu redémarrer.

Il semble donc que le gel et le redémarrage dur de mon Macbook aient fait penser à Postgres que ses processus étaient toujours en cours d'exécution même après le redémarrage. Suppression de ce fichier résolue. J'espère que cela aide les autres! Beaucoup de gens ont des problèmes similaires, mais la plupart des réponses concernaient les autorisations de fichiers, alors que dans mon cas, les choses étaient différentes.

Dragon de feu
la source
9
j'espère que cette réponse finira par aider quelqu'un d'autre, et merci à la personne qui l'a votée. malgré le modérateur qui a marqué cette question en double, elle est unique et utile. merci débordement de pile pour le site génial et les experts ici pour le partage!
FireDragon
2
Juste FWIW, la suppression de postmaster.pid est dangereuse, vous devez être vraiment sûr qu'aucun postgresprocessus n'est en cours d'exécution avant de le faire.
Craig Ringer
21
Très bonne réponse. Merci d'avoir publié l'intégralité de votre processus plutôt que la commande potentiellement destructrice!
dojosto
3
D'accord. La réponse à propos de postmaster.pid est bonne, mais chaque étape du processus consistant à déterminer si / où postgres s'exécute est inestimable . Je vous remercie!
Clinton
11
Mon journal postgres sur macos était à /usr/local/var/log/postgres.log.
ryantuck
172

Rien de ce qui précède n'a fonctionné pour moi. J'ai dû réinstaller Postgres de la manière suivante:

  • Désinstaller postgresql avec brew: brew uninstall postgresql
  • brew doctor (réparer ce qui est ici)
  • brew cleanup
  • Supprimez tous les dossiers Postgres:

    • rm -r /usr/local/var/postgres
    • rm -r /Users/<username>/Library/Application\ Support/Postgres
  • Réinstallez postgresql avec brew: brew install postgresql

  • Démarrer le serveur: brew services start postgresql
  • Vous devriez maintenant avoir à créer vos bases de données ... ( createdb)
ypicard
la source
4
A fonctionné pour moi, mais je n'ai pas eu à supprimer une base de données réelle et je n'avais pas de dossier dans Application Support. Je pense que le fait était que certains éléments de brassage avaient des liens symboliques cassés lors de l'installation de postgres. Les corriger et réinstaller postgres ont à nouveau résolu le problème. Merci!
Kulbi
2
Ni cette réponse ni la meilleure réponse n'ont fonctionné pour moi, jusqu'à ce que je brew postgresql-upgrade-database
coure
Cela a fonctionné pour moi, sauf que je n'ai pas eu à supprimer les anciennes données.
Amal Antony
Pour confirmer: cela supprime toutes vos bases de données, correct? J'ai pu me débrouiller avec juste un brew reinstall postgres, confirmant que le dernier numéro de version principale de Homebrew Postgres était le même que mon actuel (cassé).
Jacob Ford
85

Si vous êtes sur macOS et avez installé postgres via homebrew, essayez de le redémarrer avec

brew services restart postgresql

Si vous êtes sur Ubuntu, vous pouvez le redémarrer avec l'une de ces commandes

sudo service postgresql restart

sudo /etc/init.d/postgresql restart
Jagdish Barabari
la source
34

Ce n'est peut-être pas lié, mais une erreur similaire apparaît lorsque vous effectuez une mise postgresà niveau vers une version principale à l'aide de brew; en utilisant brew info postgresqldécouvert cela qui a aidé:

To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
Crazy Barney
la source
4
Cela a fonctionné pour moi en passant du 11 au 12 sur Catalina
nzajt
1
A aussi fonctionné pour moi
emptywalls
15

Voici ma voie:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm /usr/local/var/postgres/postmaster.pid
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
smartworld-dm
la source
1
Cela a fonctionné pour moi quand aucun autre arrêt et démarrage / redémarrage / réinstallation de Postgres utilisant homebrew n'a été fait. Merci @ smartworld-dm
Bradley
1
C'est l'âme sur laquelle je reviens toujours. Je pourrais ajouter un alias qui, lorsque je l'exécuterai fix-my-postgresql, l'exécutera :)
Tomas K
1
Une idée pourquoi je dois le faire chaque fois que je redémarre mon PC?
stephano
11

si votre postmaster.pidest parti et que vous ne pouvez pas redémarrer ou quoi que ce soit, procédez comme suit:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

comme expliqué ici initialement

Antoine
la source
8

Bonjour tout le monde :)
La meilleure mais étrange façon pour moi était de faire les choses suivantes.

1) Téléchargez postgres93.app ou une autre version. Ajoutez cette application dans le dossier / Applications /.

2) Ajoutez une ligne (commande) dans le fichier .bash_profile(qui se trouve dans mon répertoire personnel):

export PATH = / Applications / Postgres93.app / Contents / MacOS / bin /: $ PATH
C'est un CHEMIN à psqlpartir de Postgres93.app. La ligne (commande) s'exécute à chaque démarrage de la console.

3) Lancer à Postgres93.apppartir du /Applications/dossier. Il démarre un serveur local (le port est "5432" et l'hôte est "localhost").

4) Après toutes ces manipulations, j'étais heureux d'exécuter $ createuser -SRDP user_nameet d'autres commandes et de voir que cela fonctionnait! Postgres93.apppeut être exécuté pour s'exécuter à chaque démarrage de votre système.

5) De plus, si vous voulez voir graphiquement vos bases de données, vous devez les installer PG Commander.app. C'est un bon moyen de voir votre base de données PostgreSQL comme de jolies tables de données

Bien sûr, cela n'est utile que pour le serveur local. Je serai heureux si ces instructions aident les autres personnes confrontées à ce problème.

crazzyaka
la source
1
La clé ici est d'ajouter Postgres à votre chemin (étape 2). Cela m'a aidé. Si vous avez installé Postgres à l'aide de Homebrew, vous pouvez l'ajouter à votre chemin en ajoutant la ligne suivante à votre .bash_profile: export PATH='/usr/local/Cellar/postgresql/9.4.1/bin/':$PATH- Gardez à l'esprit que votre numéro de version peut être différent.
Tina
7

Ce problème a de nombreuses sources et donc de nombreuses réponses. J'ai connu chacun d'eux.

1) Si vous avez un crash quelconque, la suppression du fichier /usr/local/var/postgres/postmaster.pid est probablement nécessaire car postgres ne l'a peut-être pas traité correctement. Mais assurez-vous qu'aucun processus n'est en cours d'exécution.

2) Craig Ringer a souligné dans d'autres articles que le regroupement d'Apple de postgreSQL entraîne des problèmes d'installation de pg gem. La définition de la variable d'environnement PATH est une solution.

3) Une autre solution consiste à désinstaller et réinstaller la gemme. Une mise à jour de l'infusion peut également être nécessaire.

Si vous tombez sur ce post, si vous pouvez identifier l'une des sources, vous gagnerez du temps ...

Jérôme
la source
3
Je suis content d'avoir posté cela. Un autre crash et la réponse peut être récupérée assez rapidement ...
Jerome
6

Pour moi, la solution était simplement de redémarrer mon ordinateur. J'ai d'abord essayé de redémarrer avec les services Brew et lorsque cela n'a pas fonctionné, le redémarrage semblait être la meilleure option à essayer avant de rechercher certaines des solutions les plus complexes. Tout a fonctionné comme il se doit après.

Matt Lemieux
la source
5

J'étais confronté à un problème similaire ici, j'ai résolu ce problème comme ci-dessous.

En fait, le processus postgres est mort, pour voir l'état de postgres, exécutez la commande suivante

sudo /etc/init.d/postgres status

Il dira que le processus est mort, il suffit de démarrer le processus

sudo /etc/init.d/postgres start
Jagdish Barabari
la source
Merci pour la réponse, votre réponse m'a aidé à résoudre le même problème avec quelques modifications: sudo /etc/init.d/postgresql start
Pravitha V
4

Cela m'est arrivé après que mon Mac (High Sierra) a gelé et j'ai dû le redémarrer manuellement (appuyez et maintenez le bouton d'alimentation). Tout ce que j'avais à faire pour le réparer était de faire un redémarrage propre.

skwidbreth
la source
3

Mon problème a fini par être que j'utilisais Gas Mask (un gestionnaire de fichiers hôtes pour Mac), et je n'avais pas d'entrée pour localhost dans le fichier hôtes que j'utilisais.

J'ai ajouté:

127.0.0.1 localhost

Et cela a résolu mon problème.

jawns317
la source
3

Je ne sais pas vraiment pourquoi, mais mon installation Postgres a été un peu vissée et certains fichiers ont été supprimés, ce qui entraîne l'erreur OP.

Malgré le fait que je puisse exécuter des commandes comme brew service retart postgreset voir les messages appropriés, cette erreur a persisté.

J'ai parcouru la documentation postgres et j'ai trouvé que mon dossier /usr/local/var/postgresétait totalement vide. J'ai donc exécuté ce qui suit:

initdb /usr/local/var/postgres

Il semble que certaines configurations aient eu lieu avec cette commande.

Ensuite, il m'a demandé d'exécuter ceci:

postgres -D /usr/local/var/postgres

Et cela m'a dit qu'un fichier postmaster.pid existe déjà.

J'avais juste besoin de savoir si le brassage serait en mesure de récupérer les configurations que je venais de lancer, alors je l'ai testé.

ls /usr/local/var/postgres

Cela m'a montré un fichier postmaster.pid. Je l'ai ensuite fait brew services stop postgresqlet le fichier postmaster.pid a disparu. Puis je l'ai fait brew services start postgresql, et VIOLA, le dossier est réapparu.

Ensuite, je suis allé de l'avant et j'ai exécuté mon application, qui a en fait trouvé le serveur, mais mes bases de données semblent avoir disparu.

Bien que je sache qu'ils ne sont peut-être pas disparus du tout - la nouvelle initialisation que j'ai faite peut avoir créé un nouveau data_area, et l'ancien n'est pas pointé du doigt. Je devrais regarder où cela en est et le signaler ou simplement créer à nouveau mes bases de données.

J'espère que cela t'aides! La lecture des documents postgres m'a beaucoup aidé. Je déteste lire les réponses qui sont comme "Collez ça en marche!" parce que je ne sais pas ce qui se passe et pourquoi.

Nick Res
la source
2

Les causes de cette erreur sont nombreuses, alors commencez par localiser votre fichier journal et vérifiez-le pour trouver des indices. Ce pourrait être à /usr/local/var/log/postgres.logou /usr/local/var/postgres/server.logou peut-être ailleurs. Si vous avez installé avec Homebrew, vous pouvez trouver l'emplacement dans ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist.

Tamlyn
la source
2

J'ai eu le même problème. La plupart du temps, le problème est le fait qu'il y a un fichier restant

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

ce qui fonctionne pour la plupart des gens, mais mon cas était différent - j'ai essayé de googler ce problème pendant les 3 dernières heures, j'ai désinstallé postresql sur OSX via brew, purgé la base de données, rien n'a fonctionné.

Enfin, j'ai remarqué que j'avais un problème avec l'infusion que chaque fois que j'essayais d'installer quoi que ce soit, il apparaissait:

Error: Permission denied @ rb_sysopen - /private/tmp/github_api_....

ou quelque chose comme ça à la fin d'une installation.

Je l'ai fait sudo chmod -R 777 /private/tmpet ça marche enfin!

J'écris ceci parce que cela pourrait être une solution pour quelqu'un d'autre

Maciej Pk
la source
1

Allez /var/log/ et lancez cat postgres.log Ici vous trouverez la raison de l'échec des postgres. S'il s'agit d'un arrêt intelligent, votre icu4cversion (bibliothèque C ++ pour Unicode) n'est probablement pas appropriée et est liée à postgres. Exécutez donc les commandes suivantes.

brew upgrade brew cleanup Cela devrait fonctionner;)

Shishir
la source
Peut avoir à s'exécuter brew styleensuite si brew cleanupcasse Homebrew.
olliezhu
0

J'ai dû consulter ce post plusieurs fois pour résoudre ce problème. Il existe un autre correctif, qui s'appliquera également à des problèmes similaires avec d'autres programmes en cours d'exécution.

Je viens de découvrir que vous pouvez utiliser les deux commandes suivantes.

$ top

Cela montrera toutes les actions en cours d'exécution avec leurs numéros PID. Lorsque vous trouvez des postgres et le pid associé

$ kill pid_number

cohart
la source
0

Je viens de recevoir le même problème que j'ai mis ma machine ( ubuntu) à jour et j'ai obtenu une erreur ci-dessous:

n'a pas pu se connecter au serveur: aucun fichier ou répertoire de ce type Le serveur fonctionne-t-il localement et accepte-t-il les connexions sur le socket de domaine Unix "/var/run/postgresql/.s.PGSQL.5432"?

Après avoir terminé le processus de mise à jour lorsque je redémarre, mon erreur système a disparu. Et son travail comme par le charme comme avant .. Je suppose que cela s'est produit pendant la mise à jour de pg et un autre processus a commencé.

Gagan Gami
la source
0

SUPER NEWBIE ALERT: J'apprends juste le développement web et le tutoriel particulier que je suivais mentionnait que je devais installer Postgres mais je n'ai pas mentionné que je devais l' exécuter aussi ... Une fois que j'ai ouvert l'application Postgres, tout allait bien et dandy.

Lorenzo
la source
0

La réponse de @Jagdish Barabari m'a donné l'indice dont j'avais besoin pour résoudre ce problème. Il s'avère que deux versions de postgresql ont été installées alors qu'une seule était en cours d'exécution. La purge de tous les fichiers postgresql et la réinstallation de la dernière version ont résolu ce problème pour moi.

5280Angel
la source
0

J'ai supprimé / usr / lib de LD_LIBRARY_PATH et cela a fonctionné. Je travaillais dans les postgres de dockerfile: alpine.

ddtraveller
la source