124 votes

Impossible de se connecter à PostgreSQL local

J'ai réussi à bousiller mon environnement de développement local.

Toutes mes applications Rails locales donnent maintenant l'erreur :

PGError
could not connect to server: Permission denied
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Je n'ai aucune idée de ce qui a causé ça.

En cherchant une solution, j'ai mis à jour toutes les gemmes fournies, les gemmes du système et les ports Mac. Sans succès.

D'autres personnes ont signalé ce problème lors de la mise à niveau de OSX Leopard vers Lion, en raison d'une confusion quant à la version de Postgres à utiliser (c'est-à-dire la version OSX ou la version MacPorts). J'utilise Lion depuis plusieurs mois, il semble donc étrange que cela se produise maintenant.

Je suis réticent à m'aventurer trop loin sans comprendre d'abord quel est le problème. Comment puis-je déboguer cela méthodiquement ?

Comment puis-je déterminer combien de versions de PostgreSQL sont présentes sur mon système, laquelle est accédée et où elle se trouve ? Comment puis-je corriger ce problème si le mauvais PostgreSQL est utilisé ?

Désolé pour les questions de débutant. Je suis encore en train d'apprendre comment cela fonctionne ! Merci pour tous les conseils.

EDIT

Quelques mises à jour basées sur les suggestions et commentaires ci-dessous.

J'ai essayé d'exécuter pg_lsclusters qui a renvoyé un command not found erreur.

J'ai ensuite essayé de localiser mon fichier pg_hba.conf et j'ai trouvé ces trois exemples de fichiers :

/opt/local/share/postgresql84/pg_hba.conf.sample
/opt/local/var/macports/software/postgresql84/8.4.7_0/opt/local/share/postgresql84/pg_hba.conf.sample
/usr/share/postgresql/pg_hba.conf.sample

Je suppose donc que 3 versions de PSQL sont installées ? Macports, OSX par défaut et ? ??.

J'ai ensuite fait une recherche sur le launchctl startup script. ps -ef | grep postgres qui a donné

0    56     1   0 11:41AM ??         0:00.02 /opt/local/bin/daemondo --label=postgresql84-server --start-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper start ; --stop-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper stop ; --restart-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper restart ; --pid=none
  500   372     1   0 11:42AM ??         0:00.17 /opt/local/lib/postgresql84/bin/postgres -D /opt/local/var/db/postgresql84/defaultdb
  500   766   372   0 11:43AM ??         0:00.37 postgres: writer process                                                                                                                                                                                                                                                                                                                   
  500   767   372   0 11:43AM ??         0:00.24 postgres: wal writer process                                                                                                                                                                                                                                                                                                               
  500   768   372   0 11:43AM ??         0:00.16 postgres: autovacuum launcher process                                                                                                                                                                                                                                                                                                      
  500   769   372   0 11:43AM ??         0:00.08 postgres: stats collector process                                                                                                                                                                                                                                                                                                          
  501  4497  1016   0 12:36PM ttys000    0:00.00 grep postgres

J'ai publié le contenu de postgresql84-server.wrapper à l'adresse suivante http://pastebin.com/Gj5TpP62 .

J'ai essayé d'exécuter port load postgresql184-server mais a reçu une erreur Error: Port postgresql184-server not found .

Je ne sais toujours pas comment résoudre ce problème et j'apprécierais tout conseil de type "pour les nuls".

Merci !

EDIT2

Ce problème a commencé après que j'ai eu quelques problèmes avec daemondo. Mes applications Rails locales plantaient avec une erreur d'application du type "daemondo gem can't be found". J'ai alors procédé à une série de mises à jour de bundles, de gemmes, de ports et de brew pour essayer de trouver le problème.

Cette erreur pourrait-elle être un problème avec Daemondo ?

66voto

couling Points 2445

Cela ressemble vraiment à une erreur de permissions de fichiers. Les sockets de domaine Unix sont des fichiers et ont des autorisations d'utilisateur comme les autres. Il semble que l'utilisateur OSX qui tente d'accéder à la base de données n'a pas les autorisations nécessaires pour accéder au fichier socket. Pour confirmer cela, j'ai fait quelques tests sur Ubuntu et psql pour essayer de générer la même erreur (inclus ci-dessous).

Vous devez vérifier les permissions sur le fichier socket et ses répertoires /var y /var/pgsql_socket . Votre application Rails (utilisateur OSX) doit avoir les permissions d'exécution (x) sur ces répertoires (de préférence accorder les permissions à tout le monde) et le socket doit avoir les permissions complètes (wrx). Vous pouvez utiliser ls -lAd <file> pour les vérifier, et si l'un d'entre eux est un lien symbolique, vous devez vérifier le fichier ou le répertoire vers lequel le lien pointe.

Vous pouvez changer les permissions sur le répertoire pour vous-même, mais le socket est configuré par postgres dans le fichier postgresql.conf . Il se trouve dans le même répertoire que pg_hba.conf (Vous devrez trouver lequel). Une fois que vous avez défini les permissions, vous devrez redémarrer postgresql.

# postgresql.conf should contain...
unix_socket_directory = '/var/run/postgresql'       # dont worry if yours is different
#unix_socket_group = ''                             # default is fine here
#unix_socket_permissions = 0777                     # check this one and uncomment if necessary.

EDIT :

J'ai fait une recherche rapide sur Google, que vous pouvez consulter pour voir si elle est pertinente. Cela pourrait bien avoir pour conséquence que toute tentative de find votre fichier de configuration échoue.

http://www.postgresqlformac.com/server/howto_edit_postgresql_confi.html


Messages d'erreur :

Utilisateur non trouvé dans pg_hba.conf

psql: FATAL:  no pg_hba.conf entry for host "[local]", user "couling", database "main", SSL off

L'utilisateur a échoué à l'authentification du mot de passe :

psql: FATAL:  password authentication failed for user "couling"

Fichier socket unix manquant :

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 socket Unix existe, mais le serveur ne l'écoute pas.

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

Mauvaises permissions sur un fichier de socket unix :

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

41voto

wildplasser Points 17900

Mon intuition me dit qu'il s'agit (encore une fois) d'un problème lié à mac/OSX : le front-end et le back-end supposent un emplacement différent pour la socket du domaine unix (qui fonctionne comme un rendez-vous point).

Liste de contrôle :

  • Est-ce que Postgres fonctionne ? ps aux | grep postgres | grep -v grep devrait faire l'affaire
  • Où se trouve la prise de courant : find / -name .s.PGSQL.5432 -ls (le socket se trouvait auparavant dans /tmp ; vous pouvez commencer à chercher là)
  • même si vous localisez le socket (du domaine unix), le client pourrait utiliser un autre emplacement. (cela se produit si vous mélangez des distributions, ou si vous avez une distribution installée quelque part et une autre installation (par exemple à partir des sources) ailleurs), avec le client et le serveur utilisant des adresses différentes. rendez-vous adresses.

Si postgres est en cours d'exécution, et que le socket existe réellement, vous pouvez utiliser :

  • psql -h /the/directory/where/the/socket/was/found mydbname

(qui tente de se connecter au socket du domaine unix)

; vous devriez maintenant obtenir l'invite psql : essayez \d y luego \q de démissionner. Vous pouvez également essayer :

  • psql -h localhost mydbname .

(qui tente de se connecter à localhost (127.0.0.1)

Si ces tentatives échouent en raison d'une autorisation insuffisante, vous pouvez modifier pg_hba.conf (et SIGHUP ou redémarrer) Dans ce cas : vérifiez également les journaux.

Une question similaire : Impossible de démarrer Postgres

Remarque : Si vous pouvez accéder à l'invite psql, la solution rapide à ce problème consiste à modifier votre adresse IP. config/database.yml , ajoutez :

host: localhost

ou vous pouvez essayer d'ajouter :

host: /the/directory/where/the/socket/was/found

Dans mon cas, host: /tmp

26voto

Tom Harrison Jr Points 5855

Essayez de désinstaller la gemme pg ( gem uninstall pg ) puis réinstallation -- si vous utilisez bundler, alors bundle install sinon gem install pg . Assurez-vous également que Path sélectionne la bonne version : Lion possède une version de posgresql (les versions précédentes n'en avaient pas) et elle peut se trouver dans le chemin avant votre version installée localement (par exemple MacPorts, homebrew).

Dans mon cas : installation homebrew de postgresql, mise à jour de postgresql, rails, etc. et ensuite cette erreur. Désinstaller et réinstaller la gemme pg l'a fait pour moi.

20voto

Ben W Points 2272

L'emplacement du fichier socket est intégré dans la gemme au moment de la compilation. Vous devez donc reconstruire votre gemme pg.

gem pristine pg
# or
bundle exec gem pristine pg

Cela devrait résoudre ce problème particulier.

16voto

Neal Points 1594

Si vous obtenez une erreur similaire :

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

Cela pourrait faire l'affaire (c'est le cas pour moi) :

initdb /usr/local/var/postgres -E utf8

Le répertoire spécifié doit être différent si vous n'utilisez pas OSX/Brew.

Note : Ce n'est pas le message d'erreur exact vu ci-dessus, mais ce fil de discussion est le premier résultat pour ce message d'erreur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X