web-dev-qa-db-fra.com

error with postgresql datababse: le serveur est-il exécuté localement et accepte-t-il les connexions sur le socket de domaine Unix "/var/run/postgresql/.s.PGSQL.5432"?

Lorsque j'exécute le rake db:migrate ou la commande Rails s, j'obtiens la même erreur: 

Error : could not connect to server: 
No such file or directory Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

J'obtiens l'erreur dans le navigateur quand j'essaie Rails s.

C'est mon database.yml

default: &default
adapter: postgresql
encoding: unicode

pool: 5

development:
<<: *default
database: books_development




test:
<<: *default
database: books_test



production:
<<: *default
database: books_production
username: abd
password: <%= ENV['BOOKS_DATABASE_PASSWORD'] %>

Remarque: j'ai les bases de données books_development; books_test ; et les postresql fonctionnent sans problèmes quand j'essaie Sudo /etc/init.d/postgresql start

J'ai couru: 

create database books_development;
create database books_test; 

dans la console psql. Et il a dit que c'est fait avec succès 

J'ai essayé beaucoup de solutions et j'ai passé hier à chercher une solution et aucune solution aux questions connexes n'a résolu mon erreur.

J'ai postgresql-9.4 (le dernier) et xubuntu 14.04

Des idées?

12
adyouri

La convention pour PostgreSQL empaqueté pour les dérivés Debian ou Debian tels que Ubuntu consiste à utiliser /var/run/postgresql comme répertoire pour les sockets de domaine Unix. D'autre part, la convention pour les bibliothèques client postgres auto-compilées est d'utiliser /tmp, à moins que ce ne soit auto-configuré.

Ainsi, la cause fondamentale habituelle de cette discordance entre les deux est une combinaison d'éléments auto-compilés côté client avec des packages pré-compilés côté serveur (même si le client et le serveur sont installés sur le même ordinateur, côté encore distincts et peuvent être désynchronisés).

La liaison souple de /tmp vers ce répertoire, comme suggéré par le demandeur, fonctionne, sauf que le lien sera perdu à chaque redémarrage, car en général, /tmp est vidé au redémarrage.

Une meilleure option serait d’ajouter une entrée dans database.yml:

  • soit Host: /tmp si le chemin d'accès réel au socket est /tmp (serveur compilé automatiquement, client packagé)

  • ou Host: /var/run/postgresql si le chemin d'accès réel du socket /var/run/postgresql/ (serveur packagé, client compilé automatiquement).

Lorsque la valeur du champ Host commence par une barre oblique, la bibliothèque postgres sait qu'il s'agit de l'emplacement d'un répertoire pour les sockets locaux plutôt que d'un nom d'hôte. Le nom du fichier à l'intérieur du répertoire .s.PGSQL.portnumber est généré et ne doit pas être spécifié, mais uniquement le répertoire.

Une autre possibilité consiste à configurer les progiciels auto-compilés aussi près que possible de Debian, en remplaçant les valeurs par défaut.

11
Daniel Vérité

J'ai eu la même erreur Is the server running locally and accepting connections on Unix domain socket “/var/run/postgresql/.s.PGSQL.5432”? en tapant psql dans l'utilisateur postgres dans Ubuntu 14.04. Je n'ai pas trouvé de solution de travail existante.

La réponse courte a été la suivante: mon installation a créé un répertoire var/pgsql_socket mais aucun fichier de configuration n'en a connaissance.

1) Trouver le fichier postgres.conf (il était dans etc/postgresql/9.6/main pour moi)
2) passer à listen_addresses = '*' 
3) ajouter un autre répertoire de socket Unix 
unix_socket_directories = '/var/run/postgresql, /var/pgsql_socket' # comma-separated list of directories 
4) À ce stade, le démarrage postgresql du service Sudo a tenté de démarrer mais n’avait pas le pouvoir de créer le fichier verrou. 
* The PostgreSQL server failed to start. Please check the log output: 2016-10-05 17:14:55 CEST [28472-1] FATAL: could not create lock file "/var/pgsql_socket/.s.PGSQL.5432.lock": Permission denied 2016-10-05 17:14:55 CEST [28472-2] LOG: database system is shut down 
5) Modifier les autorisations (trouvé dans le commentaire de Mark Berry ici
$ Sudo chown root.postgres /var/pgsql_socket
$ Sudo chmod g+wx /var/pgsql_socket
6) Sudo service postgresql start 
Sudo -i -u postgres 
psql 

Cela a finalement fonctionné pour moi

5
descript

Je l'ai résolu. Je viens de créer un lien logiciel en utilisant:

Sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

puis édité le 

/etc/postgresql/9.4/main/pg_hba.conf

(Si vous avez une autre version de postgresql, vous devez changer 9.4 dans le chemin)

De: 

local all postgres peer

À:

local all postgres md5

3
adyouri

Le même symptôme peut être causé par un fichier de verrouillage obsolète /var/run/postgresql/.s.PGSQL.5432.lock. L’un des symptômes de ceci est la déclaration de psql 

psql: impossible de se connecter au serveur: aucun fichier ni répertoire de ce type Le serveur fonctionne-t-il localement et accepte-t-il connexions sur le socket de domaine Unix "/var/run/postgresql/.s.PGSQL.5432"?

bien qu'il y ait clairement un socket avec ce chemin disponible, comme indiqué par netstat -lp --protocol=unix | grep postgres

Le problème peut être résolu en supprimant le fichier de verrouillage et en redémarrant postgresql. C'est nettement moins invasif qu'une purge et une réinstallation.

Sudo rm /var/run/postgresql/.s.PGSQL.5432.lock
Sudo service postgresql restart
2
David Weber

Solution:

Essaye ça

export LC_ALL="en_US.UTF-8"

et ça. ( 9.3 est ma version actuelle de PostgreSQL. Écris ta version!)

Sudo pg_createcluster 9.3 main --start
2
bogdanvlviv

Lorsque j'ai rencontré cette erreur, mon serveur postgres était en train d'écouter sur un autre port (5433) . Pour résoudre ce problème, ajoutez une ligne dans votre database.yml pour indiquer à Rails d'utiliser le même système:

port: 5433
1
tobasti

Cela signifie que votre Postgres serveur n'est pas en cours d'exécution.

Check Postgres Etat du service du terminal

Sudo service postgresql status

Activer Postgres Service, si non démarré

Sudo service postgresql start

OU

Sudo service postgresql restart

Votre commande devrait maintenant fonctionner si Postgres Service est démarré avec succès.

0
Sumon Sarker

Lancer pg_lsclusters listera tous les clusters postgres en cours d’exécution sur votre appareileg: 

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

si le statut est arrêté 

#format is pg_ctlcluster <version> <cluster> <action>
Sudo pg_ctlcluster 9.6 main start

Si ce processus n'aboutit pas, cela générera l'erreur . Mon erreur était (vous pouvez voir le journal des erreurs sur /var/log/postgresql/postgresql-9.6-main.log

FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
Try adding `postgres` user to the group `ssl-cert`

assurez-vous que postgres est le propriétaire de /var/lib/postgresql/version_no/maineg: Sudo chown postgres -R /var/lib/postgresql/9.6/main/

Cela m'est arrivé et il s'est avéré que j'ai supprimé par erreur l'utilisateur Postgres du groupe "ssl-cert". Exécutez le code ci-dessous pour résoudre le problème du groupe d'utilisateurs et résoudre les autorisations.

#set user to group back with
Sudo gpasswd -a postgres ssl-cert

# Fixed ownership and mode
Sudo chown root:ssl-cert  /etc/ssl/private/ssl-cert-snakeoil.key
Sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key

# now postgresql starts! (and install command doesn't fail anymore)
Sudo service postgres restart
0
Noushad PP