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?
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"?
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
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.
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.
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.
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
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!
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
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
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
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
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.
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
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:)
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
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.
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.
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/:$PATHC'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.
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
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.
gem uninstall pg
Sur OS X avec Homebrew:
gem install pg -- --with-pg-config=/usr/local/bin/pg_config