Réparation de Postgresql après la mise à niveau vers OSX 10.7 Lion

196

J'ai récemment effectué une mise à niveau vers OSX 10.7, auquel cas l'installation de mes rails s'est complètement interrompue lors de la tentative de connexion au serveur psql. Quand je le fais à partir de la ligne de commande en utilisant

psql -U postgres

cela fonctionne parfaitement, mais lorsque j'essaie d'exécuter le serveur ou la console rails avec le même nom d'utilisateur et le même mot de passe, j'obtiens cette erreur

...activerecord-3.0.9/lib/active_record/connection_adapters/postgresql_adapter.rb:950:in `initialize': could not connect to server: Permission denied (PGError) 
Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Toutes les idées qui pourraient se passer seraient super utiles! Merci!

Dave G
la source
Cela a également frappé quelqu'un dans mon bureau; nous avons eu un problème similaire pour obtenir le mauvais binaire, un problème supplémentaire pour essayer de se connecter aux sockets de domaine dans un répertoire différent avec des autorisations différentes, et il semble que la mise à niveau ait mangé toutes les données de la base de données locale. Heureusement, ce n'était qu'une boîte de développement, donc ce n'est pas énorme, mais légèrement désagréable. :)
1
J'ai frappé celui-ci aujourd'hui et je me souviens avoir lu votre question hier. C'est bon de voir @John Wang est sorti et l'a expliqué :)
Ryan Bigg

Réponses:

291

C'est un problème de PATH. Mac OSX Lion inclut maintenant Postgresql dans le système. Si vous faites un, which psqlvous verrez probablement usr/bin/psqlau lieu de celui usr/local/bin/psqlqui est correct de HomeBrew. Si vous exécutez, brew doctorvous devriez recevoir un message indiquant que vous devez ajouterusr/local/bin à la tête de votre variable env PATH.

Modification de votre .bash_profile ou .profile, ou du shell que vous utilisez et ajout: export PATH=/usr/local/bin:$PATH

comme première exportation pour PATHensuite quitter la session shell ou sourcez votre fichier avec source ~/.bash_profileet cela devrait maintenant être à nouveau OK.

John Wang
la source
12
Cela l'a corrigé. Vous pouvez également modifier / etc / chemins et vous assurer que / usr / local / bin est en haut
Greg
153
Notez également que si vous avez installé le pg gem AVANT de corriger votre chemin, il utilisera le mauvais psql. Si tel est le cas, désinstallez pg gem puis réinstallez-le (gem uninstall pg && gem install pg).
Troy
4
Est-ce pour l'homebrew? Les ports semblent le mettre dans: / opt / local / lib / postgresql91 Alors assurez-vous d'utiliser export PATH = / opt / local / lib / postgresql91 / bin: $ PATH
Antony Stubbs
1
Mon chemin rapportait correctement, mais la solution de Troy consistant à désinstaller le pg gem, puis à laisser le bundler réinstaller a fait l'affaire pour moi.
Tom Harrison
2
Juste pour clarifier - il semble que vous feriez mieux de configurer votre chemin correctement, puis désinstallez / réinstallez le pg gem
Jamie Cook
90

Pour ceux d'entre vous qui sont intéressés, j'ai reconstitué la solution. Tout ce dont j'avais besoin était d'ajouter

host: localhost

au database.yml pour mon environnement et tout était sauce.

Dave G
la source
9
soyez prudent avec ceci: ce paramètre modifie l'accès du socket de domaine à une connexion TCP. Bien que cela fonctionne probablement, vous risquez de perdre un peu de performances et de ports utilisables sur votre machine, ce qui peut être un problème en fonction de votre configuration. La solution fournie par John est correcte.
pilif
3
'gem uninstall pg' (choisissez toutes les versions), puis 'bundle' à nouveau pour installer la version pg de votre Gemfile a fonctionné pour moi.
tmadsen
Merci Dave G, cela a aussi fonctionné pour moi. J'ai installé la mise à jour 10.7.3 et rake db: migrate plaint. Cela l'a corrigé.
Sathish
Cela a également fonctionné pour moi. Cependant, j'ai laissé le mot de passe et le nom d'utilisateur vides.
Benjamin
J'imagine que cela fonctionnerait car cela force une connexion TCP / IP.
douma
46

J'ai eu ce problème avec Mountain Lion, mais la seule chose qui a fonctionné pour moi était cette solution :

Vérifiez où la cible réelle est:

sudo find / -name .s.PGSQL.5432

J'avais besoin de créer ce répertoire:

mkdir /var/pgsql_socket/

Ensuite, en utilisant le résultat de la recherche ci-dessus, créez ce lien symbolique:

ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

Je soupçonne que pour la plupart des gens sur Mountain Lion, vous pouvez simplement créer le répertoire et faire le lien symbolique et ne pas perdre de temps à faire la recherche, sauf si le lien symbolique ne fonctionne pas.

PS - mon PostgreSQL a été installé via le programme d'installation officiel.

Ben
la source
J'ai le sentiment que cela pourrait être pour moi, mais je ne peux pas le faire fonctionner. J'obtiens ceci: ln: / var / pgsql_socket /: Aucun fichier ou répertoire de ce type
Emmanuel
Désolé, j'ai oublié que je suis tombé dessus aussi. Ajout d'une étape supplémentaire pour répondre.
Ben
Que Dieu vous bénisse. Très appréciée.
Matt
29

Si le problème persiste après avoir changé de chemin (comme cela a été le cas pour moi), essayez également ceci ...

gem pristine pg

Il semble que le problème réside (partiellement) dans la gemme pg elle-même. Quand il construit, il détermine où la socket de domaine doit être. Si vous modifiez l'emplacement du socket de domaine après le fait, il ne semble pas prendre effet jusqu'à ce que vous reconstruisiez la gemme.

Darren
la source
Cela a fonctionné pour moi, même après avoir corrigé le CHEMIN et réinstallé la gemme pg sans défaut.
Elliot Winkler
Merci pour cette astuce, Darren
bhinks
15

Pour ceux qui ont installé directement à partir du programme d'installation officiel, l'ajout de l'hôte à la commande fonctionne sans changement de chemin:

psql -h localhost -U postgres
Rogerio
la source
5

J'avais le même problème et j'avais du mal à faire fonctionner la solution de John Wang. Comme Darren l'a noté, il y a un problème avec la gemme pg. Pour que cela fonctionne, je devais:

gem uninstall pg

Réinstallez ensuite.

Ce qui l'a fait fonctionner.

vladiim
la source
J'ai dû faire ça deux fois ... bizarre. J'ai désinstallé pg puis installé le bundle et cela a échoué. Ensuite, Gem a installé pg et cela a fonctionné. Merci!
Dustin
3

J'ai également rencontré cela, mais j'avais moi-même installé postgres (pas avec homebrew). Si c'est le cas, vous devez trouver l'ancien chemin d'accès à psql (qui peut être / usr / local / bin, mais pour moi c'était / usr / local / pgsql / bin) et l'ajouter à votre $ PATH.

(avant) which psql => / usr / bin / psql

(correction) export PATH = / usr / local / psql / bin: $ PATH

(après) `which psql '=> / usr / local / psql / bin

La suggestion de John Wang d' source ~/.bash_rcajouter ensuite à votre bash_rc est d'or.

tjarratt
la source
3

Est-ce pour l'homebrew? Les ports semblent le mettre:

/opt/local/lib/postgresql91 

Assurez-vous donc que vous utilisez l'exportation

PATH=/opt/local/lib/postgresql91/bin:$PATH

Problème de ports Mac: https://trac.macports.org/ticket/30125

Antony Stubbs
la source
1

Je ne suis pas satisfait des réponses les plus appréciées car elles sont spécifiques à l'utilisateur du système d'exploitation ou remappent Postgres pour utiliser TCP au lieu des sockets de domaine, comme l'a souligné @pilif. J'ai vu une autre solution qui implique de réorganiser les chemins par défaut au niveau du système pour vérifier le chemin de Brew avant un chemin système principal, mais cela semble dangereux car cela pourrait affecter toutes les autres collisions de noms d'applications comme celle-ci.

Ce site détaille une solution trouvée par mon collègue. Cela revient à exécuter un script shell unique qui

  1. sauvegarder les fichiers Postgres 8.4 dans un répertoire séparé
  2. symlink l'installation de Postgres par le brasseur en place

Cela vient avec la mise en garde que le Postgres par défaut du système est tout ce que la bière a installé, vous devez donc faire un jugement pour savoir si cela vous convient. Je ne me vois pas avoir besoin de Postgres 8.4 spécifiquement sur 9.x, mais YMMV

Eric Hu
la source
1

Une autre solution possible qui a fonctionné pour moi est de réinitialiser le fichier postmaster en le supprimant. Exécutez simplement:

rm /usr/local/var/postgres/postmaster.pid 

Cela vaut la peine de vérifier le journal pour les erreurs que vous pouvez trouver ici:

/usr/local/var/postgres/server.log

Le message d'erreur que j'avais était:

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 161) running in data directory 
"/usr/local/var/postgres"?

Tout a bien fonctionné par la suite.

Mike
la source
J'ai eu le problème uniquement à partir de la ligne de commande. La suppression du fichier /usr/local/var/postgres/postmaster.pid a résolu mon problème.
Michael A.
0

Dans mon cas, le serveur n'a pas démarré en raison de paramètres de mémoire partagée incorrects. Au début, j'étais confus car plusieurs processus postgres étaient en cours d'exécution, mais il s'agissait de processus système standard. Recherchez les postmasterprocessus!

Tout ce que je devais faire était de modifier les paramètres de mémoire partagée . Jouer avec les paramètres de chemin n'était pas nécessaire dans mon cas.

Ortwin Gentz
la source
0

Vous devrez peut-être spécifier l'hôte de votre base de données.

user618589
la source
0

Si vous aimez un changement permanent dans votre $ PATH, essayez ceci:

defaults write $HOME/.MacOSX/environment PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/local/bin"

cela réécrira votre ~/.MacOSX/environment.plist.

gylow
la source
0

Je suis nouveau sur Rails, mais l'ajout de ce qui suit à database.yml a fonctionné pour moi:

host: localhost

port: 5432

Vous ne savez pas pourquoi Rails utilise par défaut des sockets de domaine au lieu de TCP, tandis que PostgreSQL ne configure pas de sockets de domaine par défaut.

Ken Freeman
la source
0

Mon PostgreSQL est installé dans / Library / PostgreSQL afin que / usr / var ne fonctionne pas pour moi.

Il semble que Woz soit correct car chaque fois que je ferme le couvercle de mon macbook pro, il se bloque ... Voici ce qui a fonctionné pour moi après le crash:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
sethmuss
la source