web-dev-qa-db-fra.com

Impossible de se connecter à PostgreSQL local

J'ai réussi à intégrer 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 tous les joyaux fournis, les joyaux système et MacPorts. Pas de joie.

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

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

Comment puis-je déterminer le nombre de versions de PostgreSQL présentes sur mon système, celle à laquelle on accède et son emplacement? Comment résoudre ce problème si le mauvais PostgreSQL est utilisé?

Désolé pour les questions noob. J'apprends encore comment ça marche! Merci pour tous les pointeurs.

MODIFIER

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

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

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

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

J'ai ensuite fait une recherche pour le script de démarrage launchctl ps -ef | grep postgres qui a renvoyé

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 posté le contenu de postgresql84-server.wrapper à l'adresse http://Pastebin.com/Gj5TpP62 .

J'ai essayé de lancer port load postgresql184-server mais j'ai reçu une erreur Error: Port postgresql184-server not found.

Je ne comprends toujours pas comment résoudre ce problème et j'apprécie les indicateurs "pour les nuls".

Merci!

EDIT2

Ce problème a commencé après que j'ai eu des problèmes avec le daemondo. Mes applications Rails locales se sont effondrées avec une erreur d’application du type "daemondo gem ne peut pas être trouvé". J'ai ensuite passé en revue une série de mises à jour de bundles, de mises à jour de gemmes, de ports et de breuvages pour essayer de trouver le problème.

Cette erreur pourrait être un problème avec daemondo?

124
Andy Harvey

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

Vous devez vérifier les autorisations sur le fichier de socket et ses répertoires /var et /var/pgsql_socket. Votre application Rails (utilisateur OSX) doit disposer des autorisations d'exécution (x) sur ces répertoires (accordez de préférence des autorisations à tout le monde) et le socket doit disposer de toutes les autorisations (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 vous-même les permissions sur le répertoire, mais le socket est configuré par postgres dans postgresql.conf. Cela se trouve dans le même répertoire que pg_hba.conf (vous devrez déterminer lequel). Une fois que vous avez défini les autorisations, 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 voudrez peut-être examiner pour voir si elle est pertinente. Cela pourrait bien entraîner une tentative de find votre fichier de configuration en échec.

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'authentification du mot de passe de l'utilisateur a échoué:

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

Fichier de 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"?

Le 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"?

Autorisations de fichier incorrectes sur le 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"?
66
Philip Couling

Mon instinct est qu’il s’agit (encore une fois) d’une chose sous Mac/OSX: les serveurs frontaux et dorsaux prennent un emplacement différent pour le socket unix-domain (qui fonctionne comme un rendez-vous point).

Liste de contrôle:

  • Postgres est-il en cours d'exécution: ps aux | grep postgres | grep -v grep devrait faire l'affaire
  • Où se trouve le socket: find / -name .s.PGSQL.5432 -ls (le socket était auparavant dans/tmp; vous pourriez commencer à regarder là-bas)
  • même si vous localisez le socket (unix-domain), le client peut utiliser un emplacement différent. (cela se produit si vous mélangez des distributions, ou si vous avez une distribution installée quelque part et en avez une autre (source, par exemple) ailleurs), avec le client et le serveur prenant des rendez-vous différents 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 unix-domain)

; vous devriez maintenant obtenir l'invite psql: essayez \d puis \q pour quitter. Vous pouvez aussi essayer:

  • psql -h localhost mydbname.

(qui tente de se connecter à localhost (127.0.0.1)

Si ces tentatives échouent faute d'autorisations suffisantes, 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 parvenez à l'invite psql, la solution rapide à ce problème consiste simplement à modifier votre 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

41
wildplasser

Essayez de désinstaller la pem gem (gem uninstall pg), puis de la réinstaller - si vous utilisez bundler, puis 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 ne l’était pas) et il se peut qu’elle se trouve dans le chemin précédant votre version installée localement (par exemple, MacPorts, homebrew).

Dans mon cas: homebrew installer postgresql, postgresql mis à jour, Rails, etc., puis j'ai eu cette erreur. La désinstallation et la réinstallation du pg gem l’ont fait pour moi.

26
Tom Harrison

L'emplacement du fichier de socket est indiqué dans la gemme au moment de la compilation. Ainsi, vous devez reconstruire votre pg gem.

gem pristine pg
# or
bundle exec gem pristine pg

Cela devrait résoudre ce problème particulier.

20
Ben Walding

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 (il l'a fait 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.

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

16
Neal

ce qui a résolu cette erreur, c’est de supprimer un fichier nommé postmaster.pid situé dans le répertoire postgres. veuillez consulter ma question/réponse en utilisant le lien suivant pour des instructions étape par étape. mon problème n'était pas lié aux autorisations de fichiers:

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

les personnes qui ont répondu à cette question ont cependant perdu beaucoup de jeu, merci pour cela! j'ai voté tout ce que je pouvais

8
FireDragon

Voici comment j'ai résolu ce message d'erreur, basé en partie sur la réponse de wildplasser.

find / -name .s.PGSQL.5432 -ls 2> /dev/null
  => ... /tmp/.s.PGSQL.5432

Donc, il y a mon socket ou autre chose, mais le client le cherche à:

/var/run/postgresql/.s.PGSQL.5432

Donc, faites simplement un lien symbolique vers le /tmp/.s.PGSQL.5432:

Sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

J'espère que cela aide à n'importe qui. Cela semble un peu faux, mais bon, ça marche!

7
Frans

J'ai commencé à l'obtenir après la mise à niveau vers un nouveau postgres - je n'avais pas réalisé que j'avais des fichiers de données en attente.

J'ai d'abord essayé de démarrer le serveur postgres:

postgres -D /usr/local/var/postgres

c'est comment j'ai vu cette erreur

FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.0, which is not compatible with this version 9.3.5.

Alors j'ai trouvé cette réponse sur SO - lié à une erreur d'incompatibilité: https://serverfault.com/questions/342626/how-do-i-upgrade-postgresl-database-incompatibility -error

C'est ce qui l'a corrigé

mv /usr/local/var/postgres /usr/local/var/postgres.old
initdb -D /usr/local/var/postgres
6
Mark Swardstrom

Je viens de confirmer que j'avais un problème similaire sur PSQL et Django,

On dirait que mon serveur psql n’a pas été arrêté correctement et que le fichier postmaster.pid était toujours présent (doit être supprimé automatiquement lors de la fermeture correcte) dans mon dossier postgres.

Supprimé cela et tout bon

4
purchas

J'avais cette même erreur (il s'avère que c'était une erreur avec postmaster.pid. Voici comment j'ai mis à jour postgres ( merci à Ricardo Burillo pour le correctif ):

$ rm /usr/local/var/postgres/postmaster.pid 
$ pg_resetxlog -f /usr/local/var/postgres
4
respondcreate

J'ai eu le même problème lorsque j'essayais d'utiliser postgresql avec Rails. Mettre à jour mon Gemfile pour utiliser la nouvelle version de gem pg résoud ce problème pour moi. (Gem pg version 0.16.0 fonctionne). Dans l'utilisation de Gemfile:

gem 'pg', '0.16.0'

puis exécutez ce qui suit pour mettre à jour la gemme

bundle install --without production
bundle update
bundle install
3
andr3wll

J'ai lu de nombreux sujets sur cette erreur et la solution pour moi était simplement de redémarrer le postgres avec:

Sudo service postgresql restart

Ce qui n'est pas mentionné ici.

3
ToTenMilan
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"?

Je cherche la solution pendant un moment. Donc, celui-ci corrige le problème pour moi aussi (reinit db):

rm -r /usr/local/var/postgres  
initdb /usr/local/var/postgres -E utf8  
pg_ctl -D /usr/local/var/postgres -l logfile start

J'utilise OS X 10.11.3 avec infusion.

3
Alexander Svetly

Dans mon cas, aucune des solutions précédentes n'était bonne. Au lieu d'utiliser socket, vous pouvez utiliser TCP Host + port nombre dans le fichier Rails config. Donc, dans le fichier database.yml, ajoutez simplement deux lignes comme ici:

...
adapter: postgresql
encoding: unicode
pool: 5
Host: localhost
port: 5432

Cela a résolu mon problème :)

Avant j'ai utilisé ce correctif:

Sudo mkdir /var/run/postgresql
Sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

Mais après chaque redémarrage, /tmp/.s.PGSQL.5432 a été supprimé et j'ai dû répéter ces commandes. La solution fonctionne, mais c'est horrible, il est donc préférable de modifier simplement Rails fichier de configuration de base de données :)

2
kovpack

Cela m'est arrivé aujourd'hui après la mort de la batterie de mon Macbook. Je pense que cela peut être causé par un arrêt incorrect. Tout ce que vous avez à faire dans des cas tels que le mien est de supprimer postmaster.pid

Naviguer dans le dossier

cd /usr/local/var/postgres

Vérifiez si postmaster.pid est présent

ls

Supprimer postmaster.pid

rm postmaster.pid
2
Aaron

Vous avez eu cette erreur lorsque je configurais Posgtres avec Django, j'utilise Back Track et il est livré avec Postgres installé. Je suppose que les paramètres sont la question. Je l'ai corrigé en l'enlevant complètement puis en le réinstallant comme tel.

Sudo apt-get remove postgresql
Sudo apt-get purge postgresql

Maintenant, lancez:

apt-get --purge remove postgresql\*

pour tout supprimer de PostgreSQL de votre système. Il ne suffit pas de purger le paquet postgres car il ne s'agit que d'un méta-paquet vide.

Une fois que tous les paquets PostgreSQL ont été supprimés, exécutez:

rm -r /etc/postgresql/
rm -r /etc/postgresql-common/
rm -r /var/lib/postgresql/
userdel -r postgres
groupdel postgres

Vous devriez maintenant pouvoir:

apt-get install postgresql
2
user3982654

MacOSX ici. J'ai eu le même problème après la mise à niveau de mon installation postresql antérieure à la version 9.1 à la version 9.1.2 avec homebrew. (En passant, n'oubliez pas de vider les bases de données avant votre mise à niveau avec pg_dump, les bases de données antérieures à la 9.1 sont incompatibles.) Même problème, mêmes messages d'erreur.

La désinstallation de la gemme PG a fait l'affaire pour moi. En fait, j'ai dû danser un peu pour découvrir le problème. J'ai d'abord fait une désinstallation globale des gemmes, en nettoyant toutes les vieilles gemmes (il y en avait quelques-unes). Ensuite, j'ai retiré pg de mon Gemfile, regroupé, restauré la référence pg et rebondi une fois de plus.

Après cela, cela a fonctionné comme un charme.

1
wizardwerdna

Ce problème me posait problème et, après une investigation plus poussée (avec rake db:setup), j'ai constaté que Rails essayait de se connecter à une instance postgres précédemment utilisée - une qui était stockée dans des variables env sous le nom DATABASE_URL. .

Le correctif: unset DATABASE_URL

source: https://stackoverflow.com/a/17420624/2577622

0
adrichman

J'ai essayé la plupart des solutions à ce problème, mais je ne pouvais en faire fonctionner aucune.

J'ai exécuté lsof -P | grep ':5432' | awk '{print $2}' qui a montré le PID du processus en cours d'exécution. Cependant, je ne pouvais pas le tuer avec kill -9 <pid>.

Quand j'ai lancé pkill postgresql, le processus s'est finalement arrêté. J'espère que cela t'aides.

0
Colin Walker
gem uninstall pg

Sous OS X avec Homebrew:

gem install pg -- --with-pg-config=/usr/local/bin/pg_config
0
张健健