web-dev-qa-db-fra.com

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

J'ai récemment effectué une mise à niveau vers OSX 10.7. À ce stade, mon Rails a été complètement interrompue lors de la tentative de connexion au serveur psql. Lorsque je le fais depuis la ligne de commande, en utilisant

psql -U postgres

cela fonctionne totalement bien, mais lorsque j'essaie d'exécuter le serveur ou la console Rails avec le même nom d'utilisateur et mot de passe, le message d'erreur suivant s'affiche).

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

Toute idée de ce qui pourrait se passer serait super utile! Merci!

196
Dave G

C'est un problème de chemin. Mac OSX Lion inclut désormais Postgresql dans le système. Si vous faites un which psql vous verrez probablement usr/bin/psql au lieu de usr/local/bin/psql qui est le bon choix de HomeBrew. Si vous exécutez brew doctor vous devriez recevoir un message indiquant que vous devez ajouter usr/local/bin à la tête de votre variable env. PATH.

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

en tant que première exportation pour le PATH, puis quittez votre session Shell ou sourcez votre fichier avec source ~/.bash_profile et il devrait maintenant être à nouveau OK.

291
John Wang

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

Host: localhost

à la base de données.yml pour mon environnement et tout était sauce.

90
Dave G

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

Vérifiez où se trouve la cible réelle:

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 sans perdre de temps à chercher si le lien symbolique ne fonctionne pas.

PS - ma PostgreSQL a été installée via l’installateur officiel.

46
Ben

Si le problème persiste après avoir changé le chemin (comme ce fut le cas pour moi), essayez aussi ceci ...

gem pristine pg

Il semble que le problème réside (en partie) dans le pg gem lui-même. Quand il construit, il détermine où le socket de domaine devrait être. Si vous modifiez l'emplacement du socket de domaine après le fait, cela ne semble pas prendre effet tant que vous n'avez pas reconstruit la gemme.

29
Darren

Pour ceux qui ont installé directement à partir du programme d'installation officiel, il suffit d'ajouter l'hôte à la commande sans modifier le chemin d'accès:

psql -h localhost -U postgres
15
Rogerio

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 le pg gem. Pour que cela fonctionne, il me fallait:

gem uninstall pg

Puis réinstallez.

Ce qui a fonctionné.

5
vladiim

Est-ce pour l'homebrew? Ports semble le mettre dans:

/opt/local/lib/postgresql91 

Alors assurez-vous d'utiliser export

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

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

3
Antony Stubbs

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

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

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

(after) `quel psql '=>/usr/local/psql/bin

La suggestion de John Wang à source ~/.bash_rc ensuite vous ajoutez que votre bash_rc est en or.

3
tjarratt

Je ne suis pas satisfait des réponses les plus votées, car elles sont soit spécifiques à un utilisateur de système d’exploitation, soit remappent Postgres pour qu’il utilise TCP au lieu de sockets de domaine, comme l'a souligné @pilif. J'ai vu un autre Cette solution implique de réorganiser les chemins d'accès par défaut au niveau système pour vérifier le chemin d'accès de Brew avant un chemin système principal, mais cela semble dangereux car cela pourrait affecter toutes les autres collisions de nom d'application telles que celle-ci.

Ce site détaille une solution trouvée par mon collègue. Il s’agit d’exécuter un seul script Shell qui

  1. sauvegarder les fichiers Postgres 8.4 dans un répertoire séparé
  2. symlink l'installation de Postgres dans la brasserie

Cela vient avec l’avertissement que le système par défaut de Postgres est celui que brew a installé, vous devez donc vous prononcer pour savoir si cela vous convient. Je ne me vois pas forcément avoir besoin de Postgres 8.4 plus de 9.x, mais de YMMV

1
Eric Hu

Une autre solution possible qui a fonctionné pour moi consiste à réinitialiser le fichier postmaster en le supprimant. Il suffit de lancer:

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

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

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

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

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é après.

1
mike

Dans mon cas, le serveur n'a pas démarré à cause de paramètres de mémoire partagée erronés. Au début, j'étais confus parce qu'il y avait plusieurs processus postgres en cours d'exécution, mais il s'agissait de processus système standard. Recherchez les processus postmaster!

Tout ce que j'avais à faire était de changer les paramètres de la mémoire partagée . Il n'était pas nécessaire de bricoler les paramètres de chemin d'accès dans mon cas.

0
Ortwin Gentz

Ma PostgreSQL est installée dans/Library/PostgreSQL, de sorte que les éléments/usr/var ne fonctionnent 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é après un crash pour moi:

Sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
0
sethmuss

Je suis nouveau dans Rails, mais l’ajout suivant à database.yml a fonctionné pour moi:

Host: localhost

port: 5432

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

0
Ken Freeman

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

0
user618589

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.

0
gylow