J'ai récemment mis à jour ma machine de Mac OS X Lion (10.7.4) à Mountain Lion (10.8) et je pense que cela a bouleversé mon installation PostgreSQL. Il a été installé à l'origine via Homebrew. Je ne suis pas un administrateur de base de données, mais j'espère que quelqu'un pourra me dire comment résoudre ce problème.
Je ne parviens pas à me connecter (mais j'étais capable de le faire avant le Mountain Lion):
$ psql -U rails -d myapp_development
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
Mais Postgres fonctionne toujours clairement:
$ ps aux | grep postgres
meltemi 2010 0.0 0.0 2444124 5292 ?? Ss Wed01PM 0:00.02 postgres: rails myapp_development [local] idle
meltemi 562 0.0 0.0 2439312 592 ?? Ss Wed12PM 0:02.28 postgres: stats collector process
meltemi 561 0.0 0.0 2443228 1832 ?? Ss Wed12PM 0:01.57 postgres: autovacuum launcher process
meltemi 560 0.0 0.0 2443096 596 ?? Ss Wed12PM 0:02.89 postgres: wal writer process
meltemi 559 0.0 0.0 2443096 1072 ?? Ss Wed12PM 0:04.01 postgres: writer process
meltemi 466 0.0 0.0 2443096 3728 ?? S Wed12PM 0:00.85 /usr/local/bin/postgres -D /usr/local/varpostgres -r /usr/local/var/postgres/server.log
Et il répond aux requêtes (à la fois une base de test et la base de développement) à partir d'une application Rails locale.
User Load (0.2ms) SELECT "users".* FROM "users"
Rendered users/index.html.haml within layouts/application (1.3ms)
Il semble n'y avoir aucun /var/pgsql_socket/
répertoire, sans parler du /var/pgsql_socket/.s.PGSQL.5432
fichier de socket mentionné ci-dessus!?! Peut-être que l'installation de Mountain Lion a effacé cela?
$ ls -l /var/ | grep pg
drwxr-x--- 2 _postgres _postgres 68 Jun 20 16:39 pgsql_socket_alt
Comment puis-je résoudre ce problème?
la source
/usr/local/var/postgres/server.log
?$PATH
quelqu'un l' a modifié la mise à niveau/usr/bin
est en avance sur/usr/local/bin
et je pense que Mountain Lion peut venir avec PostgreSQL pré-installé!?! Enquête sur ...Réponses:
J'ai trouvé que j'avais un problème extrêmement similaire, à savoir que postgres ouvrait un socket dans
/var/pgsql_socket_alt
lequel aucun de mes logiciels ne s'attend à chercher, mais la solution à mon problème n'était pas seulement un problème avec mon$PATH
.Je devais créer le répertoire
/var/pgsql_socket
, le chown à moi-même et le placerunix_socket_directory
danspostgresql.conf
(situé dans/usr/local/var/postgres
) dans ce répertoire, puis utiliser lepg_ctl
binaire in/usr/local/bin
pour démarrer avec succès le serveur postgres correct (ce qui est bien le cas ici$PATH
- assurez-vous dewhich pg_ctl
résoudre le problème/usr/local/bin/pg_ctl
, ou juste toujours appelez-le explicitement).Cela pourrait aider les autres utilisateurs qui trouvent cette question via la
/var/pgsql_socket_alt
mention.la source
$PATH
comme je l'ai fait.Une explication plausible et typique serait que le
psql
contenu de l’homebrew est/usr/local/bin/psql
différent de celui qui se trouve dans votre $ PATH, comme/usr/bin/psql
(fourni avec OS X). Vous voudrez peut-être essayer avec le chemin complet:$ /usr/local/bin/psql -U rails -d myapp_development
En outre, il y a quelque chose d'assez inhabituel dans le
ps
résultat de votre question: le serveur postgres fonctionne sous unmeltemi
utilisateur Unix, alorspostgres
qu'en général, l' utilisateur Unix dédié est utilisé pour cela.la source
_postgres
(avec trait de soulignement) pour l'utilisateur / le groupe m'est inconnu. Est-ce un artefact ou prévu?$PATH
problème, comme vous l'avez dit. Les choses fonctionnent comme avant lorsque j'utilise/usr/local/bin/psql
pour accéder à la base de données. Soit Lion n’avait pas de système PostgreSQL, soit mon $ PATH était configuré différemment. Cela fait un an que je suis embrouillé pour la dernière fois, donc je ne me souviens pas exactement. En ce qui concerne l'utilisateur Unix ... avec une installation Homebrew de PostgreSQL, le serveur est lancé par launchd et l'utilisateur est défini sur l'utilisateur local qui l'a installé, par défaut. Les choses sont configurées différemment sur Mac OS X Server, qui lance automatiquement PostgreSQL souspostgres
.Je ne connais aucun fichier de configuration pour le client psql. Cependant, psql respecte un certain nombre de variables d’environnement en corrélation avec les options de ligne de commande.
Donc, pour que le psql utilise automatiquement le socket de votre choix, vous pouvez définir la variable PGHOST sur le répertoire contenant le socket. c'est à dire
la source
Essayer:
ou
la source
En retard, mais j'ai trouvé cela utile: http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion
C'était pour Lion, mais j'avais les mêmes problèmes que celui de ce fil après avoir passé de 10.6.8 à Mountain Lion et installé PostgreSQL via HomeBrew auparavant sous 10.6.8. J'ai également eu le
/var/pgsql_socket_alt
dossier mystérieux après la mise à niveau, mais je l'ai simplement supprimé et créé/var/pgsql_socket
comme suggéré par @wolftron. Cependant, ce n'était pas la solution finale.Si je laissais en
unix_socket_directory
blanc / commentaispostgresql.conf
, tous les projets existants avant la mise à niveau se plaindraient de l'/var/pgsql_socket
absence du socket . Mais si je changeais de conf et de coder en durvar/pgsql_socket
, tous les nouveaux projets se plaindraient que le socket/tmp
était manquant. Très frustrant ... jusqu'à ce que je réinstallepg gem
dans un projet pré-10.8 (gem uninstall pg && gem install pg
) et laisse deunix_socket_directory
commentaires dans leconf
fichier. Après unpg_ctl
redémarrage rapide du serveur, les nouveaux et les anciens projets ont fonctionné. Ma socket pgsql habite/tmp
maintenant, fwiw.Note: si vous utilisez
activerecord-postgresql-adapter
gem, désinstallez-le d'abord, puis réinstallez pg, puis réinstallez-leactiverecord-postgresql-adapter
.la source
Je viens juste de m'inscrire à la dba SE, alors il semble que je ne sois pas en mesure de commenter l'article (quel pot!).
Cependant, j'étais confiant que j'étais dans le même bateau que @thure. Je m'étais assuré que / usr / local / bin était plus tôt dans mon chemin que / usr / bin, il avait vérifié quels fichiers binaires le shell avait hachés
which
ettype
, etc.J'ai vu les mêmes symptômes que @thure. Puis j'ai eu une épiphanie; J'ai réalisé que j'avais reconstruit le
pg
gemme (j'utilise Ruby) dans un shell dont PATH avait été affecté de manière négative par path_helper de Mac (qui est exécuté à partir de / etc / profile et place / usr / bin avant / usr / local / bin) .J'ai désinstallé pg et l'ai réinstallé dans un shell dont le chemin était correct. Tout à coup, je pouvais me connecter!
Donc, assurez-vous de recompiler les personnes qui lient votre langage et laissez-les trouver la copie correcte de (vraisemblablement)
pg_config
.la source
J'ai trouvé cette réponse: https://stackoverflow.com/questions/10763143/in-rails-couldnt-create-database-for-adapter-postgresql Et, aussi simple soit-il, cela a fonctionné pour moi ... a couru un
$bundle update
et ça a recommencé à fonctionner.la source
J'ai trouvé que la création de liens symboliques entre l'emplacement réel et l'emplacement prévu fonctionnait parfaitement:
dans le sens de la réponse acceptée par @thure mais plus simple.
la source
En 2016, El Capitan est là et Apple continue de changer les choses. Postgres est installé avec le système d'exploitation et le fichier de configuration postgres définit la propriété unix_socket_directories dans postgresql.conf sur / tmp. Le socket est dans /tmp/.s.PGSQL.5432. J'ai pu contourner le problème en exécutant ce qui suit:
J'espère que ça aide quelqu'un.
la source
Cherchez le bon fichier de socket
À partir du résultat, récupérez le chemin d'accès au fichier et utilisez-le avec le paramètre "-h" dans la commande psql
Par exemple, voici comment je me connecte à la base de données de calendrier et de contacts macOS Server (au sein d'une session ssh sur le serveur):
Ensuite, le fichier de socket sur le chemin sera utilisé pour se connecter.
la source
Par défaut, PostgreSQL semble essayer de se connecter via unix-domain-sockets. UNIX DOMAIN SOCKET
Cela m'est arrivé lorsque j'exécutais l'instance postgres sur docker. Vous devez voir quel type de connexion votre serveur accepte-t-il. Pour moi, c’était clairement TCP et non un socket de domaine unix.
L'ajout d'un indicateur d'acceptation de l'hôte a redirigé la connexion vers le chemin correct et corrigé le problème.
PS: Les sockets de domaine Unix fonctionnent au niveau du noyau et la connexion n’a pas besoin de passer par tout le jazz requis pour les connexions TCP. Ils sont assez rapides et efficaces lorsque vous souhaitez établir une connexion avec votre propre machine à partir d’un processus différent dans le cadre d’une communication interprocessus.
la source
Bonjour tout le monde :)
La meilleure façon, mais étrange 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
Il est un chemin à.bash_profile
(qui se trouve dans mon répertoire personnel):psql
partirPostgres93.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 de lancer d'
$ createuser -SRDP user_name
autres commandes et de voir que cela fonctionnait!Postgres93.app
peut être fait pour fonctionner à 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 sous forme de jolies tables de donnéesBien sûr, cela n’est utile que pour le serveur local. Je serai heureux si ces instructions aident les autres personnes confrontées à ce problème.
la source
Je ne trouve pas rapidement le lien où j'ai trouvé cette pépite, mais cela a fonctionné pour moi.
export PGHOST = localhost
Oh, voici le lien. https://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser
la source
J'ai eu cette même erreur d'essayer de s'exécuter
psql
sur la ligne de commande. Il s'est avéré que ma solution était beaucoup plus simple. J'avais mal configuré le port d'écoute dans le fichier de configuration: /etc/postgresql/9.4/main/postgres.conf . J'avais changé le port du port = 5432 au port = 5433. Lorsque je l'ai reconverti en 5432, cela a fonctionné comme prévu.Pour tester si vous avez fait quelque chose de similaire, vous pouvez exécuter.
$ psql -p5433
Il existe un certain nombre d'options utiles comme celle-ci pour la commande psql que vous pouvez trouver ici: http://www.postgresql.org/docs/9.4/static/app-psql .html pour que vous puissiez tester votre propre configuration incorrecte. Bien sûr, vous pouvez simplement supprimer votre dernier jeu de modifications de configuration des fichiers * .conf, également, pour vérifier si elles sont la source de votre problème. Je pense que cela vaut certainement la peine de vérifier avant de vous en mêler avec les autorisations de fichiers et les propriétaires. (N'oubliez pas de/etc/init.d/postgresql restart
)Ce que je n'ai PAS pu trouver, c'est le fichier de configuration qui définit les valeurs par défaut de la commande psql CLI. Quelqu'un peut-il commenter avec cela, s'il vous plaît?
Pour moi, je reviens toujours à mon premier principe de programmation: "Je suis généralement la source de toute erreur donnée!"
la source