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 moment-là, l’installation de mes rails s’est complètement arrêtée lors de la tentative de connexion au serveur psql. Quand je le fais depuis la ligne de commande en utilisant

psql -U postgres 

cela fonctionne très bien, mais quand j’essaie de faire fonctionner le serveur ou la console de rails avec le même nom d’utilisateur et 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"? 

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

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

C’est un problème PATH. Mac OSX Lion inclut maintenant 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 correct pour HomeBrew. Si vous exécutez un brew doctor vous devriez recevoir un message indiquant que vous devez append usr/local/bin à la tête de votre variable env PATH.

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

comme première exportation pour PATH soit vous quittez votre session shell, soit vous sourcez votre fichier avec la source ~/.bash_profile et il devrait maintenant être à nouveau correct.

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

 host: localhost 

à la firebase database.yml pour mon environnement et tout était la sauce.

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 

Je devais 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 à moins que le lien symbolique ne fonctionne pas.

PS – mon PostgreSQL a été installé par l’installateur officiel.

Si le problème persiste, changer le chemin (comme pour moi), essayez aussi ceci …

 gem pristine pg 

Il semble que le problème réside (partiellement) dans la gem pg elle-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 avant que vous ne reconstruisiez le joyau.

Pour ceux qui ont installé directement depuis l’installateur officiel, append l’hôte à la commande fonctionne sans aucun changement de chemin:

 psql -h localhost -U postgres 

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 joyau de la pg. Pour que cela fonctionne, je devais:

 gem uninstall pg 

Puis réinstallez

Ce qui a fonctionné.

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

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

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

(après) `quel psql ‘=> / usr / local / psql / bin

La suggestion de John Wang de source ~/.bash_rc après cela ajoute que votre bash_rc est en or.

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

 /opt/local/lib/postgresql91 

Donc, assurez-vous d’utiliser l’exportation

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

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

Je ne suis pas satisfait des réponses les plus populaires, car elles sont soit spécifiques à l’utilisateur du système d’exploitation, soit à une version de Postgres pour utiliser TCP plutôt que des sockets de domaine, comme le fait remarquer @pilif. J’ai vu une autre solution qui consiste à réorganiser les chemins par défaut au niveau du système pour vérifier le chemin de Brew avant un chemin de système central, mais cela semble dangereux car il pourrait affecter toutes les 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. lien symbolique l’installation de armsage de Postgres en place

Cela signifie que le système par défaut de Postgres est celui qui a été installé, vous devez donc déterminer si cela vous convient. Je ne me vois pas avoir besoin de Postgres 8.4 spécifiquement sur 9.x, mais YMMV

Une autre solution possible a été 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 des 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é après.

Dans mon cas, le serveur n’a pas démarré à cause de parameters de mémoire partagée erronés. Au début, j’étais confus car plusieurs processus postgres fonctionnaient, mais ceux-ci étaient des processus système standard. Rechercher des processus postmaster !

Tout ce que j’avais à faire était de changer les parameters de la mémoire partagée . Jouer avec les parameters du chemin n’était pas nécessaire dans mon cas.

Vous devrez peut-être spécifier l’hôte de votre firebase database.

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 .

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 les sockets de domaine plutôt que TCP, alors que PostgreSQL ne configure pas les sockets de domaine par défaut.

Mon PostgreSQL est installé dans / Library / PostgreSQL afin que les fonctionnalités de / usr / var ne fonctionnent pas pour moi.

Il semble que Woz ait raison car à chaque fois que je ferme le couvercle de mon macbook pro, ça plante … Voici ce qui a fonctionné après mon crash:

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