J'ai réussi à brouiller 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é cela.
Lors de la recherche d'une solution, j'ai mis à jour tous les gemmes groupées, mis à jour les gemmes système, mis à jour 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 sur la version de Postgres à utiliser (c'est-à-dire la version OSX ou la version MacPorts). Je dirige Lion depuis plusieurs mois, il semble donc étrange que cela se produise maintenant.
Je suis réticent à trop déranger 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 se trouvent sur mon système, laquelle est en cours d'accès et où elle se trouve? Comment résoudre ce problème si le mauvais PostgreSQL est utilisé?
Désolé pour les questions noob. J'apprends toujours comment cela fonctionne! Merci pour tous les conseils.
ÉDITER
Quelques mises à jour basées sur les suggestions et commentaires ci-dessous.
J'ai essayé de courir, pg_lsclusters
ce qui a renvoyé une 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 du 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 publié le contenu de postgresql84-server.wrapper à http://pastebin.com/Gj5TpP62 .
J'ai essayé de courir port load postgresql184-server
mais j'ai reçu une erreur Error: Port postgresql184-server not found
.
Je ne sais toujours pas comment résoudre ce problème et j'apprécie les pointeurs "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 not be found". J'ai ensuite parcouru une série de mises à jour de bundles, de mises à jour de gemmes, de mises à jour de port et de mises à jour de brassage pour essayer de trouver le problème.
Cette erreur pourrait-elle être un problème avec le daemondo?
la source
pg_lsclusters
et votrepg_hba.conf
fichier.Réponses:
Cela ressemble vraiment à une erreur d'autorisations de fichiers. Les sockets de domaine Unix sont des fichiers et ont 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 de fichier 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 (incluse ci-dessous).
Vous devez vérifier les autorisations sur le fichier socket et ses répertoires
/var
et/var/pgsql_socket
. Votre application Rails (utilisateur OSX) doit avoir des autorisations d'exécution (x) sur ces répertoires (accordez de préférence des autorisations à tout le monde) et le socket doit avoir des autorisations complètes (wrx). Vous pouvez utiliserls -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 modifier les autorisations sur le répertoire pour vous-même, mais le socket est configuré par postgres dans
postgresql.conf
. Cela peut être trouvé dans le même répertoire quepg_hba.conf
(Vous devrez déterminer lequel). Une fois que vous avez défini les autorisations, vous devrez redémarrer postgresql.ÉDITER:
J'ai fait une recherche rapide sur google que vous voudrez peut-être examiner pour voir si elle est pertinente. Cela pourrait entraîner l'
find
échec de toute tentative de votre fichier de configuration.http://www.postgresqlformac.com/server/howto_edit_postgresql_confi.html
Messages d'erreur:
Utilisateur introuvable dans pg_hba.conf
L'utilisateur a échoué l'authentification du mot de passe:
Fichier socket unix manquant:
Le socket Unix existe, mais le serveur ne l'écoute pas.
Mauvaises autorisations de fichier sur le fichier socket unix :
la source
PS
renvoie les processus postgres pour qu'il s'exécute. Confus!Mon instinct est que c'est (encore) une chose mac / OSX: le frontal et le back-end supposent un emplacement différent pour la socket du domaine unix (qui fonctionne comme un point de rendez - vous ).
Liste de contrôle:
ps aux | grep postgres | grep -v grep
devrait faire l'affairefind / -name .s.PGSQL.5432 -ls
( le socket se trouvait auparavant dans / tmp; vous pouvez commencer à y chercher)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
puis\q
de quitter. 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 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
la source
Essayez de désinstaller le pg gem (
gem uninstall pg
) puis de le réinstaller - si vous utilisez bundler, alorsbundle install
, sinongem install pg
. Aussi, assurez-vous que le chemin choisit la bonne version: Lion a une version de posgresql (les versions précédentes n'en avaient pas) et il se peut qu'il se trouve dans le chemin avant votre version installée localement (par exemple MacPorts, homebrew).Dans mon cas: installation homebrew de postgresql, postgresql mis à jour, rails, etc., puis obtenu cette erreur. La désinstallation et la réinstallation du pg gem l'ont fait pour moi.
la source
L'emplacement du fichier de socket est intégré dans le gem au moment de la compilation. Vous devez donc reconstruire votre gem pg.
Cela devrait résoudre ce problème particulier.
la source
Si vous obtenez une erreur similaire:
Cela pourrait faire l'affaire (cela a fait pour moi):
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.
la source
rm -fr /usr/local/var/postgres
avant de couririnitb
rm -rf /usr/local/var/postgres
alorsinitdb /usr/local/var/postgres -E utf8
. Mais assurez-vous que postgres ne fonctionne pas lorsque vous faites cela, sinon le répertoire est recréé presque immédiatement.ce qui a résolu cette erreur pour moi a été de supprimer un fichier appelé postmaster.pid 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 fichier:
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 laissé tomber beaucoup de jeu, merci pour cela! j'ai voté tout ce que je pouvais
la source
C'est ainsi que j'ai résolu ce message d'erreur, basé en partie sur la réponse de wildplasser.
Donc, il y a ma socket ou autre chose, mais le client la recherche sur:
Alors faites tout simplement un lien symbolique vers le
/tmp/.s.PGSQL.5432
:J'espère que cela aide à n'importe qui. Cela semble un peu faux, mais bon, ça marche!
la source
sudo mkdir /var/run/postgresql
dossier (dans mon cas, l'id n'existait pas et n'a pas été créé par l'installateur pour pg 9.3.X).J'ai commencé à l'obtenir après la mise à niveau vers un nouveau postgres - je ne savais pas que j'avais des fichiers de données en attente.
J'ai d'abord essayé de démarrer le serveur postgres:
c'est ainsi que j'ai vu cette erreur
Alors j'ai trouvé cette réponse sur SO - liée à une erreur d'incompatibilité: /server/342626/how-do-i-upgrade-postgresl-database-incompatibility-error
C'est ce qui l'a réparé
la source
Je confirme juste que j'ai eu 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 (devrait être supprimé automatiquement lors de l'arrêt correct) dans mon dossier postgres.
Supprimé cela et tout va bien
la source
psql: could not connect to server: No such file or directory.
retraitpostmaster.pid
de/usr/local/var/postgres
tout fonctionnait à nouveau.J'obtenais la même erreur (il s'avère que c'était une erreur avec
postmaster.pid
. Voici comment j'ai remis en marche postgres ( merci à Ricardo Burillo pour le correctif ):la source
pg_resetxlog
fichier de verrouillage renvoyé "postmaster.pid" existe.J'ai eu un problème similaire en essayant d'utiliser postgresql avec des rails. La mise à jour de mon Gemfile pour utiliser la nouvelle version de gem pg résout ce problème pour moi. (la version 0.16.0 de gem pg fonctionne). Dans l'utilisation Gemfile:
puis exécutez ce qui suit pour mettre à jour le gem
la source
J'ai lu de nombreux sujets sur cette erreur et la solution pour moi était de simplement redémarrer les postgres avec:
Ce qui n'est pas mentionné ici.
la source
Je cherche la solution pendant un moment. Donc, celui-ci a également résolu le problème pour moi (reinit db):
J'utilise OS X 10.11.3 avec brew.
la source
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 comme le mien est de supprimer postmaster.pid
Accédez au dossier
Vérifiez si postmaster.pid est présent
Supprimer postmaster.pid
la source
Dans mon cas, aucune des solutions précédentes n'était bonne. Au lieu d'utiliser socket, vous pouvez utiliser le numéro TCP
host
+port
dans le fichier de configuration de Rails. Donc, dans ledatabase.yml
fichier, ajoutez simplement deux lignes comme ici:Cela a résolu mon problème :)
Avant d'utiliser ce correctif:
Mais après chaque redémarrage a
/tmp/.s.PGSQL.5432
été supprimé et j'ai dû répéter ces commandes. La solution fonctionne, mais c'est horrible, alors mieux vaut simplement modifier le fichier de configuration de la base de données Rails :)la source
Vous avez cette erreur lorsque j'ai configuré Posgtres avec Django, j'utilise Back Track et il est livré avec Postgres installé. Je suppose que les paramètres sont le problème. Je l'ai réparé en le supprimant complètement puis en le réinstallant comme ça.
Maintenant, exécutez:
pour supprimer tout PostgreSQL de votre système. Il ne suffit pas de purger le paquet postgres puisqu'il ne s'agit que d'un méta-paquet vide.
Une fois que tous les packages PostgreSQL ont été supprimés, exécutez:
Vous devriez maintenant pouvoir:
la source
MacOSX ici. J'ai eu le même problème après la mise à niveau de mon installation postresql d'une 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 antérieures à la version 9.1 sont incompatibles.) Même problème, mêmes messages d'erreur.
La désinstallation du gem pg a fait l'affaire pour moi. J'ai en fait dû faire pas mal de danse pour découvrir le problème. J'ai d'abord procédé à une désinstallation globale des gemmes, en supprimant toutes les anciennes gemmes (il y en avait quelques-unes). Ensuite, j'ai retiré pg de mon Gemfile, réorganisé, restauré la référence pg et rebondi une fois de plus.
Après cela, cela a fonctionné comme un charme.
la source
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
C'est un CHEMIN à.bash_profile
(qui se trouve dans mon répertoire personnel):psql
partir dePostgres93.app
. La ligne (commande) s'exécute à chaque démarrage de la console.3) Lancer à
Postgres93.app
partir 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_name
et d'autres commandes et de voir que cela fonctionnait!Postgres93.app
peut être exécuté à 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éesBien 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.
la source
J'ai eu ce problème qui me tourmentait, et après une enquête plus approfondie (en cours d'exécution
rake db:setup
), j'ai vu que les rails essayaient de se connecter à une instance postgres précédemment utilisée - une qui était stockée dans des variables env comme DATABASE_URL.Le correctif:
unset DATABASE_URL
source: https://stackoverflow.com/a/17420624/2577622
la source
J'ai essayé la plupart des solutions à ce problème mais je n'ai pas réussi à en faire fonctionner.
J'ai couru
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 aveckill -9 <pid>
.Quand j'ai exécuté
pkill postgresql
le processus s'est finalement arrêté. J'espère que cela t'aides.la source
Sur OS X avec Homebrew:
la source