Ne peut pas se connecter à PostgreSQL local

j'ai réussi à prendre mon environnement de développement local.

toutes mes applications locales Rails 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é cela.

en cherchant une solution, j'ai mis à jour tous les gems groupés, mis à jour les gems système, mis à jour MacPorts. Pas de joie.

D'autres ont signalé ce problème lors de la mise à niveau de OSX Leopard à Lion, en raison de la confusion sur la version de Postgres doit être utilisé (c.-à-d. version OSX ou version MacPorts). J'ai couru Lion pendant plusieurs mois, donc il semble étrange que cela arrive maintenant.

je suis réticent à trop m'amuser sans d'abord comprendre ce qu'est le problème. Comment puis-je contester cela méthodiquement?

Comment puis-je déterminer combien de versions de PostgreSQL sont sur mon système, laquelle est accessible, et où elle est située? Comment puis-je réparer cela si le mauvais PostgreSQL est utilisé?

désolé pour les questions noob. Je suis encore à apprendre comment cela fonctionne! Merci pour tous les pointeurs.

EDIT

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

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

j'ai alors essayé de Localiser mon pg_hba.fichier conf et trouvé ces trois fichiers échantillons:

/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 default et ???.

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

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.emballage à http://pastebin.com/Gj5TpP62 .

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

je suis encore très confus comment arrangez ça, et appréciez les conseils "pour les nuls".

Merci!

EDIT2

ce numéro a commencé après que j'ai eu quelques problèmes avec daemondo. Mes applications locales de Rails se sont écrasées avec une erreur d'application le long des lignes de "daemondo gem can not be found". J'ai ensuite passé en revue une série de mises à jour de bundle, de gem updates, de port updates et de brew updates pour essayer de trouver le problème.

cette erreur pourrait-elle être daemondo?

123
demandé sur Andy Harvey 2011-12-11 20:25:06

21 réponses

cela ressemble vraiment à une erreur de permissions de fichiers. Les sockets de domaine Unix sont des fichiers et ont des permissions utilisateur comme les autres. Il semble que l'utilisateur OSX qui tente d'accéder à la base de données n'ait pas les permissions d'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 et /var/pgsql_socket . Votre application Rails (utilisateur OSX) doit avoir les permissions d'execute (x) sur ces répertoires (de préférence accorder des permissions à tout le monde) et la socket doit avoir les permissions complètes (wrx). Vous pouvez utiliser ls -lAd <file> pour vérifier ces choses, et si l'un d'eux est un lien symbolique, vous devez vérifier le fichier ou le dir le lien.

vous pouvez changer les permissions sur le dir pour vous-même, mais la socket est configurée par postgres dans postgresql.conf . Cela peut être trouvé dans la même répertoire comme pg_hba.conf (vous devrez comprendre lequel). Une fois que vous aurez 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.

modifier:

j'ai fait une recherche rapide sur google que vous pouvez regarder pour voir si il est relavent. Cela pourrait bien entraîner n'importe quelle tentative de find votre fichier de configuration échouer.

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


messages d'erreur:

l'Utilisateur n'est pas 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é mot de passe auth:

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

Unix socket 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"?

Mauvais fichier de permissions 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"?
64
répondu Philip Couling 2011-12-13 13:54:55

mon intuition est qu'il s'agit (encore une fois) d'une chose mac/OSX: l'avant et l'arrière assument un emplacement différent pour la prise unix-domain (qui fonctionne comme un rendez-vous point).

Liste de contrôle:

  • postgres Est en cours d'exécution: ps aux | grep postgres | grep -v grep devrait faire l'affaire
  • où se trouve la prise: find / -name .s.PGSQL.5432 -ls (la prise était dans /tmp; vous pourriez commencer à y regarder)
  • même si vous localisez la 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 que vous avez une autre installation (par exemple à partir de la source) ailleurs, avec le client et le serveur utilisant des adresses rendez-vous différentes.

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

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

(qui tente de se connecter à la socket unix-domain)

; vous devriez maintenant obtenir l'invite psql: essayez \d et ensuite \q pour cesser de fumer. Vous pouvez également essayez:

  • psql -h localhost mydbname .

(qui tente de se connecter à localhost (127.0.0.1)

Si ces tentatives échouent en raison de l'insuffisance l'autorisation, vous pouvez modifier pg_hba.conf (et SIGHUP ou restart) dans ce cas: vérifiez aussi les logs.

une question similaire: ne peut pas obtenir Postgres commencé

Note: Si vous pouvez obtenir l'invite psql, la solution rapide à ce problème est juste de changer votre config/database.yml , ajouter:

host: localhost

ou vous pouvez essayer d'ajouter:

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

dans mon cas, host: /tmp

41
répondu wildplasser 2017-05-23 11:54:56

essayez de désinstaller le gem pg ( gem uninstall pg ) puis réinstaller -- si vous utilisez bundler, puis bundle install , sinon gem install pg . Aussi, assurez-vous que path récupère la bonne version: Lion a une version de posgresql (les versions précédentes ne l'ont pas fait) et il peut être dans le path avant votre version installée localement (par exemple MacPorts, homebrew).

dans mon cas: installation maison de postgresql, PostgreSQL mis à jour, rails, etc. et puis eu cette erreur. La désinstallation et la réinstallation de la pg gem l'a fait pour moi.

26
répondu Tom Harrison Jr 2011-12-30 01:08:16

l'emplacement du fichier socket est gravé dans le gem au moment de la compilation. Ainsi, vous avez besoin de reconstruire votre gemme pg.

gem pristine pg
# or
bundle exec gem pristine pg

cela devrait résoudre ce problème particulier.

20
répondu Ben Walding 2012-05-14 03:41:50

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

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

16
répondu Neal 2013-01-13 23:16:21

ce qui a résolu cette erreur pour moi était la suppression d'un fichier appelé postmaster.pid dans le répertoire de postgres. s'il vous plaît voir ma question/réponse en utilisant le lien suivant pour des instructions étape par étape. mon problème n'était pas lié aux permissions de fichiers:

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

les gens répondant à cette question a chuté beaucoup de jeu cependant, merci pour cela! je upvoted tout ce que je pourrait

8
répondu FireDragon 2017-05-23 12:10:33

C'est ainsi que 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, mais le client le cherche à:

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

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

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

Espérons que cette aide à la personne. Ça semble un peu faux, mais ça marche!

7
répondu Frans 2012-04-22 20:07:01

j'ai commencé à obtenir ce après la mise à niveau à un nouveau postgres - Je n'ai pas réalisé que j'avais des fichiers de données hold.

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

postgres -D /usr/local/var/postgres

c'est ainsi que 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ée à une erreur d'incompatibilité: https://serverfault.com/questions/342626/how-do-i-upgrade-postgresl-database-incompatibility-error

C'est ce qui l'a fixé

mv /usr/local/var/postgres /usr/local/var/postgres.old
initdb -D /usr/local/var/postgres
6
répondu Mark Swardstrom 2017-04-13 12:13:41

Juste confirmant j'ai eu un problème similaire sur PSQL et Django,

ressemblait à parce que mon serveur psql n'a pas été éteint correctement et le maître de poste.le fichier pid était toujours présent (devrait être supprimé automatiquement lors de l'arrêt correct) dans mon dossier postgres.

Supprimé cette et toutes les bonnes

4
répondu purchas 2013-03-12 10:30:22

j'ai eu cette même erreur (il s'avère que c'était une erreur avec postmaster.pid . Voici comment j'ai pu relancer postgres ( crédit à Ricardo Burillo pour le fix ):

$ rm /usr/local/var/postgres/postmaster.pid 
$ pg_resetxlog -f /usr/local/var/postgres
4
répondu respondcreate 2017-05-23 12:10:33

j'ai eu le même problème en essayant d'utiliser postgresql avec des rails. Mettre à jour mon fichier Gemfile pour utiliser la nouvelle version de gem pg résoudre ce problème pour moi. (gem pg version 0.16.0 fonctionne). Dans L'utilisation de Gemfile:

gem 'pg', '0.16.0'

puis lancez ce qui suit pour mettre à jour le gem

bundle install --without production
bundle update
bundle install
3
répondu andr3wll 2013-08-16 14:49:44
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. Ainsi, celui-ci a fixé la question pour moi aussi bien (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 brew.

3
répondu Alexander Svetly 2017-05-07 20:45:43

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

naviguez vers le dossier

cd /usr/local/var/postgres

vérifiez si le maître de poste.pid est présent dans la

ls

Supprimer postmaster.pid

rm postmaster.pid
2
répondu Aaron 2014-04-15 14:30:26

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 de configuration de Rails. Ainsi, dans le fichier database.yml il suffit d'ajouter deux lignes comme ici:

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

Cela a résolu mon problème :)

avant que j'utilise 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. Solution fonctionne, mais c'est horrible, il vaut donc mieux modifier le fichier de configuration de la base de données Rails:)

2
répondu kovpack 2014-07-26 23:10:12

a eu cette erreur quand J'installais Posgtres avec Django, j'utilise Back Track et il est livré avec Postgres installé. Je suppose que les réglages sont le problème. Je l'ai corrigé en supprimant complètement le réinstaller comme si.

sudo apt-get remove postgresql
sudo apt-get purge postgresql

exécuter:

apt-get --purge remove postgresql\*

pour supprimer tout PostgreSQL de votre système. Purger le paquet postgres n'est pas suffisant puisque c'est juste un méta-paquet vide.

une fois 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 être en mesure de:

apt-get install postgresql
2
répondu 2014-09-05 14:05:49

j'ai lu beaucoup de sujets à propos de cette erreur et la solution pour moi était de simplement redémarrer les postgres avec:

sudo service postgresql restart

Qui n'est pas mentionné ici.

2
répondu ToTenMilan 2017-04-13 10:31:19

MacOSX ici. J'ai eu le même problème après avoir mis à jour mon installation de postresql d'un pré-9.1 à 9.1.2 en utilisant homebrew. (Au fait, n'oubliez pas de vider les bases de données avant votre mise à niveau avec pg_dump, les bases de données pre-9.1 sont incompatibles.) Même problème, mêmes messages d'erreur.

Désinstaller le gem pg a fait l'affaire pour moi. En fait, j'ai dû danser un peu pour découvrir le problème. Tout d'abord, j'ai fait une désinstallation gem globale, en nettoyant le pont de toutes les anciennes gemmes (là ont été quelques-uns). Puis j'ai retiré pg de ma Gemfile, j'ai rebondi, j'ai restauré la référence pg, et j'ai rebondi une fois de plus.

après ça, ça a fonctionné comme un charme.

1
répondu wizardwerdna 2012-04-22 16:27:28

Hello world :)

la meilleure façon, mais étrange pour moi, était de faire les choses suivantes.



1) télécharger postgres93.app ou une autre version. Ajoutez cette application dans /Applications/ folder.

2) ajouter une ligne (commande) dans le fichier .bash_profile (qui est dans mon répertoire personnel)):

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

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

4) après toutes ces manipulations j'ai été heureux de lancer $ createuser -SRDP user_name et d'autres commandes et de voir que cela a fonctionné! Postgres93.app peut être exécuté à chaque fois que votre le système démarre.

5) aussi, si vous voulez voir vos bases de données graphiquement, vous devriez installer PG Commander.app . C'est une bonne façon de voir vos Postgres DB comme de jolies données-tables

De, bien sûr, c'est utile uniquement pour le serveur local. Je serais heureux si ces instructions aider d'autres qui a fait face à ce problème.

1
répondu crazzyaka 2014-02-01 21:38:11

j'ai eu ce problème qui m'a tourmenté, et après une enquête plus approfondie (en lançant rake db:setup ), j'ai vu que les rails essayaient de se connecter à une instance postgrès déjà utilisée - une instance qui était stockée dans les variables env comme DATABASE_URL.

La correction: unset DATABASE_URL

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

0
répondu adrichman 2017-05-23 11:54:56

j'ai essayé la plupart des solutions à ce problème, mais je n'ai pas pu en faire fonctionner.

j'ai couru lsof -P | grep ':5432' | awk '{print }' qui a montré le PID du processus en cours. Mais je ne pouvais pas le tuer avec kill -9 <pid> .

quand j'ai lancé pkill postgresql le processus s'est finalement arrêté. Espérons que cette aide.

0
répondu Colin Walker 2015-05-20 16:20:49
gem uninstall pg

Sur OS X avec Homebrew:

gem install pg -- --with-pg-config=/usr/local/bin/pg_config
0
répondu 张健健 2015-06-23 21:36:52