Erreur PostgreSQL 'Impossible de se connecter au serveur: aucun fichier ou répertoire de ce type'

136

Comme d'autres, j'obtiens cette erreur lorsque j'exécute rake db: migrer dans mon projet ou même essayer la plupart des tâches de base de données pour mes applications Ruby on Rails 3.2.

PGError (impossible de 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 "/tmp/.s.PGSQL.5432"?

J'ai installé PostgreSQL avec Homebrew il y a longtemps et suite à une tentative d'installation de MongoDB récemment, mon installation de PostgreSQL n'a jamais été la même. J'utilise OS X v10.6 Snow Leopard.

Quel est le problème et comment mieux comprendre comment PostgreSQL est et doit être configuré sur mon Mac?

Jusqu'à présent (je pense) cela me dit que PostgreSQL ne fonctionne pas (?).

ps -aef|grep postgres                                                                                                   (ruby-1.9.2-p320@jct-ana) (develop) 
  501 17604 11329   0   0:00.00 ttys001    0:00.00 grep postgres

Mais cela me dit-il que PostgreSQL est en cours d'exécution?

 launchctl load -w /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist                                                        (ruby-1.9.2-p136) 
homebrew.mxcl.postgresql: Already loaded

Comment puis-je réparer ça? qu'est-ce que je ne vois pas?

PS: ~/Library/LaunchAgentsinclut deux fichiers .plist PostgreSQL. Je ne sais pas si cela est pertinent.

org.postgresql.postgres.plist
homebrew.mxcl.postgresql.plist

J'ai essayé ce qui suit et j'ai obtenu le résultat ci-dessous.

$ psql -p 5432 -h hôte local

psql: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (fe80::1) and accepting
    TCP/IP connections on port 5432?

J'ai lu depuis que cela se produit car OS X installe sa propre version de PostgreSQL et Homebrew installe une version différente dans un endroit différent et les commandes PostgreSQL recherchent dans le répertoire / tmp /. Vous aurez besoin de chercher plus sur Stack Overflow, mais fondamentalement, vous créez un lien symbolique avec PostgreSQL pour que tout ce qui regarde dans ce chemin tmp trouve réellement le chemin réel, si cela a du sens.

C'est le lien où j'ai trouvé quelques autres choses à essayer, en particulier en faisant le lien symbolique comme ci-dessus, Mac OSX Lion Postgres n'accepte pas les connexions sur /tmp/.s.PGSQL.5432 . Je souhaite toujours que quelqu'un mette en place une explication décente des concepts derrière l'installation de PostgreSQL sur OS X et pourquoi tout cela est si difficile.

Dernières informations pour aider au dépannage:

$ which psql // This tells you which PostgreSQL you are using when you run $ psql. 

Puis exécutez:

$ echo $PATH

La chose clé à prendre en compte est la suivante:

Assurez-vous que l'entrée de chemin pour la copie de PostgreSQL que vous souhaitez exécuter VENEZ AVANT le chemin vers PostgreSQL du système OS X.

Il s'agit d'une exigence fondamentale qui décide quel PostgreSQL doit être exécuté et c'est ce que l'on me dit conduit à la plupart de ces problèmes.

Évoluer
la source
Avez-vous déjà trouvé une solution pour cela? Je vois que vous n'en avez pas marqué un. Aucun de ceux-ci ne m'aide non plus.
Andras Gyomrey
C'est encore principalement du vodoo et des incarnations étranges pour le faire fonctionner. Je viens d'ajouter [Edit 2] ci-dessus avec un lien avec quelques suggestions supplémentaires et comment faire le lien symbolique selon mes commentaires d'édition. Le Symlink a fonctionné pour moi à la fin, mais je pense que j'ai également désinstallé et réinstallé des postgres et des homebrews en cours de route, il est donc difficile de savoir exactement ce qui a fait la différence. Bonne chance. Faites un rapport si vous découvrez quelque chose de nouveau, avec 15 000 vues sur cette question, c'est quelque chose qui fait souffrir beaucoup de gens!
Évoluer le
@AndrasGyomrey Je viens de rentrer de RailsCamp15 en Australie et les gens ont dit qu'une clé était de faire en sorte que votre fichier de chemin soit correct, j'ai édité dans Edit 3 ci-dessus pour expliquer cela.
Évoluer
Gardez à l'esprit que launchctl signalant quelque chose comme chargé ne signifie PAS nécessairement qu'il est opérationnel. Vous devriez jeter un oeil à bigsql.com comme alternative; fonctionne sur Mac et dispose d'une bonne interface de gestion.
Jim Nasby

Réponses:

102

Vérifiez qu'il n'y a pas de postmaster.pid dans votre répertoire postgres, probablement /usr/local/var/postgres/

supprimez-le et démarrez le serveur.

Vérifiez - https://github.com/mperham/lunchy est un excellent wrapper pour launchctl.

Hass
la source
3
Cela a fonctionné pour moi. Je viens juste d'installer yosemite, et j'ai chargé des postgres de homebrew. A bien fonctionné la première fois que je l'ai utilisé, mais j'ai eu ce problème après un redémarrage. Alors, pouvez-vous expliquer pourquoi cela a fonctionné?
Dan Williams
2
a fonctionné pour moi, mais pour les newbs, quelqu'un peut-il expliquer pourquoi et à quel point c'est sûr
Alexander Mills
58

" Postgres.app " est une meilleure solution si vous êtes sous OS X


Voici la solution:

  1. Arrêtez la base de données
  2. cd /var
  3. rm -r pgsql_socket
  4. ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. Redémarrez PostgreSQL (pas votre ordinateur)

Plus d'informations sont disponibles sur " postgresql 9.0.3. Sur Lion Dev Preview 1 ".

josephmisiti
la source
2
Des erreurs de retour pour moi et ce correctif n'a pas aidé. J'ai l'impression de me cogner dans une pièce sombre pour comprendre ce qui se passe réellement et un processus pour appliquer moi-même un correctif. Serait-il possible pour vous d'expliquer comment je pourrais diagnostiquer et résoudre ce problème?
Évoluer le
Travaille pour moi. Ça fait un peu bizarre de chown /tmpà _postgres, mais bon :)
wrdevos
postgresapp fonctionne, mais pourquoi je ne peux pas démarrer mon serveur dans le terminal? Après avoir quitté cette application, le problème revient comme prévu.
hakunami
Cela a fonctionné pour moi, mais notez que vous devez être root ou utiliser sudo pour exécuter # 2 - 4. Aussi, veuillez clarifier l'étape 5 - il vous suffit de redémarrer postgres, pas l'ordinateur.
mpelzsherman
2
Les majuscules ne font pas une meilleure réponse. Il est toujours parfaitement bien d'installer et d'exécuter Postgres via Homebrew (services.)
Drenmi
55

Pour moi, cela fonctionne

rm /usr/local/var/postgres/postmaster.pid
tsunllly
la source
9
Dans mon cas, après avoir supprimé le pid, j'ai dû redémarrer postgresql avecpg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Obromios
4
J'ai aussi dû redémarrer postgres, une fois installé par homebrew, vous pouvez le faire comme ceci:brew services restart postgresql
santuxus
2
Je suis en docker env No such file or directorydans mon cas
Sarz
2
rm: /usr/local/var/postgres/postmaster.pid: Aucun fichier ou répertoire de ce type
nourza
13

Cela a fonctionné pour moi pour l'erreur que vous avez mentionnée. Faites l' une de ces choses:

  1. Modifiez éventuellement votre port par défaut spécifié dans le postgres.conffichier, si vous avez utilisé autre chose que le port par défaut 5432lors de l'installation.

  2. Modifiez le numéro de port postgresql.confet redémarrez le serveur de base de données.

  3. Au lieu de psqltaper la commande complète:

    psql -p 5432 -h localhost   
    • nom du serveur et numéro de port
solaimuruganv
la source
1. Je pense que mon installation aurait été conforme aux valeurs par défaut.
Évoluer le
2. Je pourrais changer cela, des implications de changer le port?
Évoluer le
3. Ajout de ma sortie de 3 ci-dessus.
Évoluer le
L'option 3 fonctionnait avec un port personnalisé. Étant donné que plusieurs serveurs pg sont installés (PostgreSQL 9.1, 9.2 et 9.3), je devais également pointer vers le bon psql.
gpasse
11

Si vous utilisez Homebrew, désinstallez Postgresql end pg gems: *

$ gem uninstall pg
$ brew uninstall postgresql

Téléchargez et exécutez le script suivant pour corriger l'autorisation sur / usr / local: * https://gist.github.com/rpavlik/768518

$ ruby fix_homebrew.rb

Puis réinstallez Postgres et pg gem: *

$ brew install postgresql  
$ initdb /usr/local/var/postgres -E utf8

Pour que launchd démarre postgresql lors de la connexion:

$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents 

Ou démarrez manuellement.

Installer pg gem

$ gem install pg

J'espère avoir aidé

Fabricio
la source
De brew info postgres:ARCHFLAGS="-arch x86_64" gem install pg
wrdevos
1
cela ne supprimerait-il pas les enregistrements de la base de données?
kibaekr
initdb /usr/local/var/postgres -E utf8travaux. Merci beaucoup.
Chris Jeon
8

J'ai eu ce problème lorsque j'ai mis à niveau Postgres vers 9.3.x. La solution rapide pour moi était de revenir à la version 9.2.x que j'avais auparavant (pas besoin d'en installer une nouvelle).

$ ls /usr/local/Cellar/postgresql/
9.2.4
9.3.2
$ brew switch postgresql 9.2.4
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
<open a new Terminal tab or window to reload>
$ psql

" Homebrew installer une version spécifique de la formule? " Offre une explication beaucoup plus complète ainsi que des moyens alternatifs pour résoudre le problème.

Silvenon
la source
Merci pour la contribution et les instructions claires pour répéter votre correction. Ce lien que vous avez inclus est bien sûr complet, je n'ai actuellement pas de problèmes avec postgres, donc je ne suis pas sûr à quel point cela est encore utile pour les autres, mais à toute autre personne si vous trouvez cela utile, veuillez commenter ici.
Évoluer le
Je le trouve utile et pertinent, mais peut-être pas directement. Il a résolu le problème en changeant simplement de version, en utilisant Brew, qui est un outil assez courant, et en répétant simplement les étapes, jusqu'à présent, très bien, le lien entre dans plus de problèmes spécifiques au brassage, cependant, donc je peux voir votre question sur sa valeur dans le contexte de la question du PO.
wkhatch
7

J'ai corrigé ce problème en mettant à jour postgres.

brew update
brew upgrade

Ensuite, j'ai dû également mettre à niveau les bases de données pour être compatibles avec la nouvelle version majeure, car je suis passé de 10 à 11.

brew postgresql-upgrade-database

(source https://github.com/facebook/react-native/issues/18760#issuecomment-410533581 )

Nelu
la source
J'ai eu cette erreur Erreur: aucune version postgresql 9.3. * Installée!
nourza le
5

Donc, pour beaucoup de problèmes ici, il semble que les gens exécutaient déjà psql et ont dû le supprimer postmaster.pid. Cependant, je n'ai pas eu ce problème car je n'avais même jamais installé correctement postgres dans mon système.

Voici une solution qui a fonctionné pour moi sous MAC OSX Yosemite

  1. Je suis allé sur http://postgresapp.com/ et j'ai téléchargé l'application.
  2. J'ai déplacé l'application vers le répertoire Application /
  3. Je l'ai ajouté à $ PATH en ajoutant ceci à .bashrc ou .bash_profile ou .zshrc: export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  4. J'ai exécuté les postgres à partir du répertoire Applications et j'ai exécuté à nouveau la commande et cela a fonctionné.

J'espère que cela t'aides! Toodles!

De plus, cette réponse m'a le plus aidé: https://stackoverflow.com/a/21503349/3173748

superjisan
la source
Cela ne pointe-t-il pas vers l'application Postgres plutôt que vers l'installation d'infusion? Cela peut vous couper de certains packages utiles (pgrouting par exemple, que vous ne pouvez pas installer pour l'application Postgres, ce qui m'a causé un chagrin sans fin et me voilà maintenant)
allthesignals
4

Lorsque vous exécutez: psql -p 5432 -h localhost, il n'utilise pas le pilote de bouclage mais utilise une vraie socket et vous devez donc configurer postgres pour accepter les connexions de socket. Par conséquent, même si pgadmin et d'autres clients peuvent fonctionner, psql ne le sera pas.

Vous devez modifier à la fois le fichier postgresql.conf et les fichiers pg_hba.conf afin de permettre la connexion sur une vraie socket. Cela permettra également la connexion à partir d'une adresse IP distante, raison pour laquelle elle est désactivée par défaut.

Ces fichiers se trouvent dans le répertoire data mais l'emplacement réel peut être différent selon la manière dont postgres a été installé. Avec postgres en cours d'exécution, exécutez la commande:

ps -ef | grep postmaster

Ces deux fichiers sont le répertoire -D (peut-être / usr / local / pgsql / data).

Pour le fichier postgresql.conf, supprimez le commentaire de listen_address et changez-le en:

listen_address = '*'

Pour le pg_hba.conf, ajoutez la ligne:

host all all 0.0.0.0/0 md5
oenpelli
la source
2

Je ne connais pas vraiment Mac ou Homebrew, mais je connais très bien PostgreSQL.

Vous voulez savoir où sont les journaux de PostgreSQL essayant de démarrer et quel est le répertoire socket pour PostgreSQL. Par défaut, lorsque vous construisez PG, le répertoire socket est / tmp /. Si vous ne l'avez pas changé lorsque vous avez construit PG puis que vous avez démarré PG, vous devriez pouvoir voir un fichier socket dans / tmp si vous faites: ls -al / tmp

Le fichier socket commence par un ".", Donc vous ne le verrez pas avec les '-a' à ls.

Si vous ne voyez pas de socket ici, et que vous ne voyez rien de ps awux | grep postgres, alors PG n'est probablement pas en cours d'exécution, ou peut-être l'est-il et c'est celui installé par OSX. Il se peut que vous ayez un conflit en écoutant sur le port 5432 sur l'hôte local - utilisez netstat -anp pour voir ce qui, le cas échéant, écoute sur 5432. Si un PG Mac OSX écoute déjà sur ce port, cela pourrait être le problème.

J'espère que cela pourra aider. J'ai entendu dire que l'homebrew peut rendre les choses un peu moche et beaucoup de gens à qui j'ai parlé encouragent à utiliser une VM à la place.

Stephen Frost
la source
Merci pour votre contribution. Si cela aide à vous donner un peu plus de contexte, homebrew exécute simplement ce script lors de l'installation de postgres. github.com/Homebrew/homebrew-core/blob/master/Formula/ ... J'espère que vous pourrez y jeter un coup d'œil et éventuellement partager d'autres informations à partir de ce que vous trouvez. Je pense que les gens ont besoin d'un moyen plus simple de déboguer pourquoi ils obtiennent cette erreur afin qu'ils sachent quelle action entreprendre.
Évoluer
D'après ce que je peux comprendre de ce script, il y a un "postgres.log" dans un répertoire "var", éventuellement sous HOMEBREW_PREFIX. Ce fichier journal contiendra des informations sur la tentative de démarrage de PG (y compris si le démarrage a échoué pour une raison quelconque). Voici un exemple de message montrant l'échec du démarrage de PG en raison d'un autre processus écoutant sur le port 5432:
Stephen Frost
2016-12-19 09: 11: 59.582 EST [20669] JOURNAL: impossible de lier le socket IPv4: Adresse déjà utilisée 19/12/2016 09: 11: 59.582 EST [20669] CONSEIL: Un autre postmaster est-il déjà en cours d'exécution sur le port 5432 ? Sinon, attendez quelques secondes et réessayez. 2016-12-19 09: 11: 59.582 EST [20669] AVERTISSEMENT: impossible de créer un socket d'écoute pour "localhost" 2016-12-19 09: 11: 59.582 EST [20669] FATAL: impossible de créer des sockets TCP / IP 2016 -12-19 09: 11: 59.582 EST [20669] LOG: le système de base de données est arrêté
Stephen Frost
De plus, il semble que ce script ne change pas le répertoire de socket par défaut, donc cela devrait être / tmp /. Vous pouvez rechercher dans le répertoire de données PG (qui semble être {HOMEBREW_PREFIX} / var / postgres) le fichier postgresql.conf et rechercher "unix_socket_directories". Il est commenté par défaut mais a la valeur par défaut, par exemple:
Stephen Frost
#unix_socket_directories = '/ tmp' # liste de répertoires séparés par des virgules
Stephen Frost
2

J'ai rencontré cette erreur lors de l'exécution sur Mac 10.15.5 en utilisant homebrew.

Il existe un fichier appelé postmaster.pid qui devrait être automatiquement supprimé à la fermeture de postresql.

Si cela ne fait pas ce qui suit

  • les services de brassage arrêtent postgresql <--- Ne pas quitter avant que rm puisse corrompre la base de données
  • sudo rm /usr/local/var/postgres/postmaster.pid
RobKohr
la source
1

La cause

Lion est livré avec une version de postgres déjà installée et utilise ces binaires par défaut. En général, vous pouvez contourner cela en utilisant le chemin complet des binaires homebrew postgres, mais il peut y avoir encore des problèmes avec d'autres programmes.

La solution

curl http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh | sh

Via

http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/

SocoM
la source
1

L'une des raisons pour lesquelles vous obtenez cette erreur est que votre base de données postgres locale s'arrête lorsque vous redémarrez votre ordinateur. Dans une nouvelle fenêtre de terminal, tapez simplement:

$psql -h localhost 

pour redémarrer le serveur.

Pstrazzulla
la source
1

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 / Contenu / 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 fait pour s'exécuter à chaque démarrage de votre système.

5) Aussi, si vous voulez voir vos bases de données graphiquement, vous devez installer PG Commander.app. C'est un bon moyen de voir votre base de données postgres 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 ceux qui ont été confrontés à ce problème.

crazzyaka
la source
1

J'avais PostgreSQL 9.3 et j'ai eu la même erreur,

Impossible de se connecter au serveur: Connexion refusée Le serveur fonctionne-t-il sur l'hôte "localhost" (127.0.0.1) et accepte les connexions TCP / IP sur le port 5432?

J'ai corrigé cela en utilisant:

chmod 777  /var/lib/pgsql/9.3/data/pg_hba.conf 
service postgresql-9.3 restart

Ça marche pour moi.

Mahesh Shitole
la source
Ce fichier n'existe pas pour moi
allthesignals
1

pour ce que ça vaut, j'ai rencontré cette même erreur quand j'avais une faute de frappe ( md4au lieu de md5) dans mon pg_hba.conffichier ( /etc/postgresql/9.5/main/pg_hba.conf)

Si vous êtes arrivé ici comme moi, revérifiez ce fichier une fois pour vous assurer qu'il n'y a rien de ridicule là-dedans.

Zach Lamberty
la source
où est le pg_hba.conffichier?
bubakazouba
1
/etc/postgresql/{postgres_version}/main/pg_hba.conf
Aidan Melen
0

Il peut y avoir différents problèmes lors de l'exécution de PostgreSQL en local. Je recommanderais de nettoyer toutes les versions de postgres installées et de recommencer à zéro. Une fois que vous l'avez installé, il est très facile de recréer votre base de données si vous avez votre projet de rails avec la mise à jourdb/schema.rb

Voici comment j'installe habituellement PostgreSQL sur un Mac . Si vous exécutez votre base de données sous l'utilisateur root localement, vous souhaiterez peut-être omettre la dernière étape qui crée un todoutilisateur

Alex Tamoykin
la source
0

L'une des raisons pourrait être que

unix_socket_directories dans le fichier postgresql.conf n'est pas répertorié avec le répertoire qu'il recherche.

Dans l'exemple de question, il recherche le répertoire / tmp, il doit être fourni dans le fichier postgresql.conf

quelque chose comme ça:

unix_socket_directories = '/var/run/postgresql,/tmp'    # comma-separated list of directories

Cette solution a fonctionné pour moi.

Kiran K Telukunta
la source
0

Si vous êtes sur MacOS et que vous utilisez homebrew, j'ai trouvé cette réponse extrêmement utile:

https://stackoverflow.com/a/27708774/4062901

Pour moi, mon serveur fonctionnait mais à cause d'une mise à niveau, j'avais des problèmes de connexion (note: j'utilise les services de brassage). Si Postgres est en cours d'exécution, essayez de cat /usr/local/var/postgres/server.logvoir ce que disent les journaux. Mon erreur était une migration, pas un problème de connexion.

Aussi après la migration manuelle qu'ils proposent (qui fonctionne mais) j'ai trouvé qu'il n'y avait plus de table pour mon utilisateur. Essayez cette commande pour résoudre ce problème: createdb(répondu via psql: FATAL: la base de données "<utilisateur>" n'existe pas )

rickrizzo
la source
0

Redémarrez simplement Postgres dès qu'une erreur apparaît en exécutant brew services restart postgresqlpuis réessayez

Kanke
la source
0

pour moi, la commande rm /usr/local/var/postgres/postmaster.pidn'a pas fonctionné car j'ai installé une version spécifique de postgresql avec homebrew.

la bonne commande est rm /usr/local/var/postgres@10/postmaster.pid.

alors brew services restart postgresql@10.

ZinkLu
la source
-5

C'est très simple. Ajoutez l'hôte uniquement dans votre fichier database.yaml.

Ricardo - Nextv
la source
host: 127.0.0.1 ou host: localhost par exemple.
Ricardo - Nextv
Tout le monde aime une solution simple. Mais comment ça marche? Comme je l'ai dit dans mes commentaires ci-dessus, la recherche à ce sujet m'a conduit sur de nombreuses routes complexes. Pouvez-vous nous en dire un peu plus et nous donner un peu plus d’informations sur ce que vous voyez réellement du problème et sur la façon dont ce simple changement résout le problème. Merci d'avoir contribué à celui-ci! :)
Évoluer le
La différence est qu'avec une connexion IP, il n'y a pas de souci de l'emplacement du fichier socket; au lieu de cela, vous vous inquiétez de l'adresse IP.
Jim Nasby