Fichier de socket «/var/pgsql_socket/.s.PGSQL.5432» manquant dans Mountain Lion (OS X Server)

95

Je viens de mettre à niveau mon MacMini Server de Lion Server vers Mountain Lion en utilisant OS X Server. J'ai le même problème avec PostgreSQL que l'année dernière lorsque j'ai installé Lion Server pour la première fois.

Lorsque j'essaie de faire n'importe quel type de commande de terminal PostgreSQL, j'obtiens le message d'erreur notoire suivant que beaucoup ont reçu au fil des ans:

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

J'essayais de changer le mot de passe pour _postgres lorsque j'ai eu l'erreur. J'ai essayé plusieurs commandes mais j'ai eu la même erreur. Je viens de redémarrer mon serveur mais pas de chance. Je me suis connecté en tant que root pour regarder / var / pgsql_socket et le dossier est vide. Le dossier / var / pgsql_socket_alt est également vide.

J'ai vérifié en ligne à ce sujet. Cependant, à peu près toutes les solutions que j'ai lues, y compris sur Stack Overflow, suggèrent la suppression et la réinstallation de PostgreSQL. Je ne sais pas mais cela ne semble pas être une option plausible car plusieurs options de l'application serveur utilisent PostgreSQL. J'ai contacté Apple Enterprise Support (sans accord) et on m'a dit que mon problème devrait être résolu par les développeurs qui gagneraient 695 $.

J'ai un site Web qui est actuellement en panne parce que je ne peux pas le reconstruire. Je ne sais pas où me tourner pour obtenir de l'aide à ce stade. Je vais continuer à chercher en ligne pour voir si je peux trouver quelque chose. Cependant j'espère que quelqu'un pourra me donner une réponse rapidement afin que je puisse reconstruire ma base de données.

Mise à jour: 13/12/2012 15:33 GMT-6

Voici ma sortie pour ps auwwx | grep postg:

_postgres      28123   0.0  0.1  2479696   7724   ??  Ss    3:01PM   0:00.04 /Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D /Library/Server/PostgreSQL For Server Services/Data -c listen_addresses= -c log_connections=on -c log_directory=/Library/Logs/PostgreSQL -c log_filename=PostgreSQL_Server_Services.log -c log_line_prefix=%t  -c log_lock_waits=on -c log_statement=ddl -c logging_collector=on -c unix_socket_directory=/Library/Server/PostgreSQL For Server Services/Socket -c unix_socket_group=_postgres -c unix_socket_permissions=0770
server1        28216   0.0  0.0  2432768    620 s000  R+    3:02PM   0:00.00 grep postg
_postgres      28138   0.0  0.0  2439388    752   ??  Ss    3:01PM   0:00.01 postgres: stats collector process                           
_postgres      28137   0.0  0.0  2479828   1968   ??  Ss    3:01PM   0:00.00 postgres: autovacuum launcher process                           
_postgres      28136   0.0  0.0  2479696    544   ??  Ss    3:01PM   0:00.00 postgres: wal writer process                           
_postgres      28135   0.0  0.0  2479696    732   ??  Ss    3:01PM   0:00.01 postgres: writer process                           
_postgres      28134   0.0  0.0  2479696    592   ??  Ss    3:01PM   0:00.00 postgres: checkpointer process                           
_postgres      28131   0.0  0.0  2439388    368   ??  Ss    3:01PM   0:00.00 postgres: logger process 

Mise à jour: 13/12/2012 18:10 GMT-6

Après une recherche intensive sur le Web, cette vidéo a été trouvée. J'ai pu faire fonctionner PostgreSQL et supprimer l'erreur. Je peux me connecter en utilisant pgadmin et phppgadmin. J'étais sur le point de retourner chez Lion Server à cause de la frustration. Maintenant, je n'aurai pas à le faire.

http://www.youtube.com/watch?v=y1c7WFMMkZ4

Pamela Cook - LightBe Corp
la source
22
Votre problème se résume au fait que la version pré-installée Mac OS X de PostgreSQL psqlest sur votre PATHavant la version que vous avez installée. Ils recherchent le socket unix à différents endroits. Utilisez tcp / ip en spécifiant -h localhostou PATHcorrigez de préférence votre afin que le correct psqlsoit trouvé en premier. La décision étrange d'Apple non seulement de regrouper PostgreSQL, mais de le gâcher pour qu'il place les choses dans des endroits non standard est la cause première de ce problème.
Craig Ringer
3
Il y a un problème persistant dans OSX, où les packagers ont décidé de placer le socket du domaine Unix à un endroit différent de la normale. Laissez-moi chercher ... BRB ... stackoverflow.com/a/8482546/905902
wildplasser
J'ai copié un ancien PATH dans .bashrc. Je n'ai pas installé une autre version de postgreSQL. Voici mon instruction PATH qui comprend le code pour RVM. Si quelqu'un pouvait me dire par quoi le changer, je le ferai. Quand je fais quel psql il se trouve dans / usr / bin / psql. Merci beaucoup pour votre aide. PATH = "$ CHEMIN: $ HOME / .rvm / bin: / usr / bin / psql: / usr / local: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin" Je recherche également le fichier socket lorsque je suis connecté en tant que root.
Pamela Cook - LightBe Corp
1
Pour ceux qui utilisent homebrewet osx@CraigRinger pourrait avoir la bonne réponse pour vous, confirmez avec brew doctor.
Karthik T

Réponses:

299

J'ai pu ajouter ce qui suit à mon .bash_profile pour éviter l'erreur:

export PGHOST=localhost

Cela fonctionne parce que :

Si vous omettez le nom d'hôte, psql se connectera via une socket de domaine Unix à un serveur sur l'hôte local, ou via TCP / IP à localhost sur des machines qui n'ont pas de sockets de domaine Unix.

Votre système d'exploitation prend en charge les sockets de domaine Unix, mais le socket Unix de PostgreSQL qui a psqlbesoin n'existe pas ou se trouve dans un emplacement différent de celui attendu.

Spécifier explicitement un nom d'hôte pour localhostforcer l' psqlutilisation de TCP / IP. La définition d'une variable d'environnement PGHOSTest l'un des moyens d'y parvenir. Il est documenté dans le manuel de psql .

maîtres
la source
37
Pour toute personne rencontrant cela avec une application Rails: vous pouvez spécifier l'hôte dans database.yml.
dwhalen
12
Quel genre de sorcellerie est ce? Je veux dire, sérieusement. Pourriez-vous expliquer?
Sreejith Ramakrishnan
1
Je reviens toujours à cette réponse! J'ai encore sauvé ma vie. Cet extrait appartient vraiment à cette page, postgresapp.com/documentation/cli-tools.html .
sambecker
1
Je ne sais pas pourquoi, mais ça marche pour moi! J'ai rencontré ce problème dans rails 5 lorsque j'utilise 'rails db: create', mais j'ai déjà défini le host: localhostdans database.yml. @dwhalen
Spark.Bao
1
Cela a fonctionné pour Rails 5.2 sans modification database.yml, lorsque cette erreur est apparue après la rétrogradation de Postgres vers une ancienne version gérée par Homebrew.
SexxLuthor
37

Essayez de coller dans la console ceci:

$ mkdir /var/pgsql_socket/ 

$ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/
Bryan Algutria
la source
Enfin, j'ai eu cette réponse.
Abs
Bien. Même si je pense savoir pourquoi cela fonctionne, un peu plus d'explications serait utile. Cette solution est meilleure que la réponse acceptée, seuls les détails manquent.
Glutexo
23

J'ai pu résoudre en remplissant simplement 127.0.0.1 pour l'adresse hôte PostgreSQL plutôt que de le laisser vide. (Exemple Django)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'USER': 'database_user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '',
        }
}
Nick Woodhams
la source
1
Je me sens un peu stupide maintenant, j'essaye de résoudre ce problème depuis environ 2 jours. Sous Windows, j'utilisais '127.0.0.1', mais j'ai ensuite déplacé mon code en production (Debian 7) et j'ai dû le changer en ''. C'est un peu bizarre qu'ils donnent un tel message d'erreur qui laisse croire que le problème pourrait être ailleurs.
fang_dejavu
10

Ouvrez «postgresql.conf» dans votre éditeur préféré. Recherchez la variable 'unix_socket_directories', elle ressemblera probablement à ceci:

unix_socket_directories = '/private/tmp/'

Changez la ligne en ceci:

unix_socket_directories = '/var/pgsql_socket/'

Remarquez si vous voulez que les fichiers de socket dans plus d'un répertoire les séparent par des virgules.

Craig Thomas
la source
Cela a eu l'effet souhaité d'essayer de créer le socket ailleurs, mais le serveur n'a pas démarré car il n'avait pas les autorisations pour créer des fichiers dans le répertoire / var. J'ai fini par changer les fichiers de configuration à un niveau supérieur pour simplement utiliser le socket là où il se trouvait à l'origine. À peu près comme indiqué dans cette réponse stackoverflow.com/a/29511357/1535177 .
Eosis
7

Comme mentionné par d'autres dans les commentaires, une solution très simple à ce problème consiste à déclarer la base de données «hôte» dans la configuration de la base de données. Ajouter cette réponse juste pour la rendre un peu plus claire pour tous ceux qui liront ceci.

Dans une application Ruby on Rails par exemple, modifiez /config/database.yml:

development:
  adapter: postgresql
  encoding: unicode
  database: database_name
  pool: 5
  host: localhost

Remarque: la dernière ligne ajoutée pour spécifier l'hôte. Avant la mise à jour vers Yosemite, je n'ai jamais eu besoin de spécifier l'hôte de cette manière.

J'espère que cela aide quelqu'un.

À votre santé

David Battersby
la source
J'avais besoin de définir mon hôte sur le répertoire que j'avais trouvé contenant le .s.PGSQL.5432fichier.
Eosis
5

Vérifiez l'état de la base de données:

service postgresql status

Si la base de données n'est pas en cours d'exécution, démarrez la base de données:

sudo service postgresql start
Sivakumar RJ
la source
coincé avec l'erreur ci-dessus et l'a résolu en démarrant le fichier db.
Sivakumar RJ
4

Pouvez-vous vérifier votre fichier postgresql.conf?

Sur quel port votre postgres fonctionne?

Je pense qu'il ne fonctionne pas sur le port 5432.Sinon, changez-le en 5432

OU sur l'utilisation du terminal

psql -U  postgres -p YOUR_PORT_NUMBER database_name
chasseur
la source
1
Je ne peux pas exécuter la commande de terminal. J'ai la même erreur. J'ai besoin d'aide pour savoir où trouver le fichier postgresql.conf. J'avais l'habitude d'avoir un dossier / var / pgsql lors de l'exécution de Lion Server. Je suppose que c'est parti maintenant. Je viens de publier ma sortie pour la commande ps grep. J'ai activé le service Wiki pour exécuter PostgreSQL. On m'a dit que je pouvais utiliser les commandes sudo serveradmin sans activer aucun service d'application serveur, mais elles ne fonctionnent pas. Je suis connecté en tant que root en ce moment, donc je devrais pouvoir faire n'importe quoi :) J'ai vérifié les ports dans Network Utility. 5432 non utilisé.
Pamela Cook - LightBe Corp
2

J'ai eu ce problème avec Django.

Corrigez-le en définissant explicitement votre nom d'hôte sur "localhost".

Ashwin Balamohan
la source
2

je fais en mot en faisant ceci:

dpkg-reconfigure locales

et choisissez vos paramètres régionaux préférés

pg_createcluster 9.5 main --start

(9.5 est ma version de postgresql)

/etc/init.d/postgresql start

et puis c'est mot!

sudo su - postgres
psql
mymusise
la source
1
apt-get install postgres-xc-client
apt-get install postgres-xc
Angela
la source
1
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"?

J'ai continué à obtenir l'erreur ci-dessus et aucune des solutions ci-dessus n'a fonctionné pour moi. Enfin, la solution suivante a résolu mon problème sur Mac OS X

Installez postgres à l'aide de brew

brew install postgres

Installer des services de brassage

brew tap homebrew/services

Pour démarrer postgres en tant que service d'arrière-plan

brew services start postgresql

Pour arrêter les postgres manuellement

brew services stop postgresql

Nous pouvons également utiliser les services de brassage pour redémarrer Postgres

brew services restart postgresql
Sudharshan
la source
1

vérifiez que le serveur postgres fonctionne avec le code suivant

sudo service postgresql status

si le serveur postgres est inactif, écrivez la commande suivante.

sudo service postgresql start
wailinux
la source
1

J'ai eu cette erreur après que mon ordinateur a gelé et redémarré tout seul. La solution pour moi n'a pas été trouvée sur cette page, plutôt sur une autre question SO très appréciée avec la même erreur psql: impossible de se connecter au serveur: aucun fichier ou répertoire de ce type (Mac OS X) . La réponse: supprimez simplement ce fichier /usr/local/var/postgres/postmaster.pid, puis brew services restart postgresqlfaites l'affaire. Tenez compte de l'avertissement sur la réponse liée à la suppression des processus postgres avant de faire cela, sinon vous pourriez corrompre votre base de données de manière permanente.

wetjosh
la source
0

Les autorisations de fichier sont restrictives sur la base de données Postgres appartenant à Mac OS. Ces autorisations sont réinitialisées après le redémarrage ou le redémarrage de Postgres: par exemple, serveradmin start postgres.

Donc, réinitialisez temporairement les autorisations ou la propriété:

sudo chmod o+rwx /var/pgsql_socket/.s.PGSQL.5432
sudo chown "webUser"  /var/pgsql_socket/.s.PGSQL.5432

La réinitialisation des autorisations n'est pas sécurisée, installez donc une version de la base de données que vous possédez pour une solution.

Clewis
la source
0

Cela m'a pris un certain temps, mais j'ai pu le faire fonctionner enfin après avoir examiné les suggestions proposées et des recherches supplémentaires sur le Web. J'ai utilisé les informations de la vidéo YouTube suivante créée par Mactasia:

http://www.youtube.com/watch?v=y1c7WFMMkZ4

Quand j'ai fait cela, j'ai vu le fichier avec .lock comme extension. Cependant, j'ai toujours eu l'erreur lorsque j'ai essayé de démarrer le serveur Rails lorsque j'ai repris le travail sur mon application Rails en utilisant PostgreSQL. Cette fois, j'ai obtenu une erreur d'autorisation refusée. C'est à ce moment-là que je me suis souvenu que non seulement je devais changer les adresses listen_addresses dans le plist, mais aussi que je devais changer unit_socket_permissions en 0777. Je me suis également connecté en tant que root pour modifier les autorisations sur le dossier var / pgsql_socket où je pouvais y accéder au niveau de l'utilisateur. Postgres fonctionne bien maintenant. Je suis en train de recharger mes données à partir de ma sauvegarde SQL.

Ce que je n'ai pas compris, c'est que lorsque j'ai activé le wiki, PostgreSQL fonctionnait soi-disant lorsque j'ai fait un postgres sudo serveradmin fullstatus mais j'ai quand même l'erreur. Tant pis.

Pamela Cook - LightBe Corp
la source
0

Je viens de créer un nouveau cluster et cela a fonctionné pour moi, j'utilisais (PostgreSQL) 9.3.20:

sudo pg_createcluster 9.3 main --start
Bruno Filgueiras
la source
0

Supprimez d'abord les postgres installés:

sudo apt-get purge postgr*
sudo apt-get autoremove

Puis installez 'synaptic':

sudo apt-get install synaptic
sudo apt-get update

Puis installez Postgres

sudo apt-get install postgresql postgresql-contrib
Gurudath BN
la source
0

Pour l'application RubyOnRails, ajoutez localhost si vous utilisez une version Postgresql personnalisée

# config/database.yml
default: &default
  host: localhost
Itsnikolay
la source