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?
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.
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
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
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
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
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
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.
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/main
eg: 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