it-swarm.com.de

fehler mit Postgresql-Datenbank: Läuft der Server lokal und akzeptiert Verbindungen auf dem Unix-Domänensocket "/var/run/postgresql/.s.PGSQL.5432"?

Wenn ich rake db:migrate oder den Befehl Rails s ausführen, erhalte ich dieselbe Fehlermeldung: 

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

Ich erhalte die Fehlermeldung im Browser, wenn ich Rails s versuche.

Dies ist meine Datenbank.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'] %>

Hinweis: Ich habe die Datenbanken books_development; books_test ; und die Postresql laufen ohne Probleme, wenn ich Sudo /etc/init.d/postgresql start versuche

Ich bin gelaufen: 

create database books_development;
create database books_test; 

in der Psql-Konsole. Und es sagte, dass es erfolgreich gemacht wird 

Ich habe viele Lösungen ausprobiert und gestern nach einer Lösung gesucht. In den verwandten Fragen konnte keine Lösung gefunden werden.

Ich habe Postgresql-9.4 (die neueste) und Xubuntu 14.04

Irgendwelche Ideen?

12
adyouri

Die Konvention für PostgreSQL-Pakete für Debian- oder Debian-Derivate wie Ubuntu besteht darin, /var/run/postgresql als Verzeichnis für Unix-Domänensockets zu verwenden. Auf der anderen Seite ist die Konvention für selbstkompilierte Postgres-Client-Bibliotheken die Verwendung von /tmp, sofern nicht anders konfiguriert.

Die übliche Ursache für dieses Missverhältnis ist daher eine Mischung aus selbst kompilierten clientseitigen Elementen mit vorkompilierten serverseitigen Paketen (auch wenn Client und Server auf demselben Computer, clientseitig und serverseitig installiert sind) noch eindeutig und kann nicht synchron sein).

Das Soft-Linking von /tmp zu diesem Verzeichnis, wie vom Fragesteller vorgeschlagen, funktioniert, mit der Ausnahme, dass der Link bei jedem Neustart verloren geht, da /tmp beim Neustart geleert wird.

Eine bessere Option wäre das Hinzufügen als Eintrag in database.yml:

  • entweder Host: /tmp, wenn der tatsächliche Socketpfad /tmp ist (selbstkompilierter Server, gepackter Client)

  • oder Host: /var/run/postgresql, wenn der tatsächliche Socketpfad /var/run/postgresql/ (verpackter Server, selbstkompilierter Client) ist.

Wenn der Wert im Feld Host mit einem Schrägstrich beginnt, weiß die Postgres-Bibliothek, dass es sich um den Speicherort eines Verzeichnisses für lokale Sockets und nicht um einen Hostnamen handelt. Der Dateiname im Verzeichnis .s.PGSQL.portnumber wird generiert und darf nicht angegeben werden, nur das Verzeichnis.

Eine andere Möglichkeit besteht darin, die selbstkompilierten Softwarepakete so nah wie möglich an Debian zu konfigurieren, wobei die Standardeinstellungen überschrieben werden.

11
Daniel Vérité

Ich hatte den gleichen Is the server running locally and accepting connections on Unix domain socket “/var/run/postgresql/.s.PGSQL.5432”?-Fehler, als ich psql in den Postgres-Benutzer in Ubuntu 14.04 eingab. Ich konnte keine funktionierende Lösung finden.

Die kurze Antwort für mich war: Meine Installation hat ein var/pgsql_socket-Verzeichnis erstellt, aber keine Konfigurationsdateien wussten davon.

1) Finden Sie die postgres.conf-Datei (es war für mich in etc/postgresql/9.6/main)
2) zu listen_addresses = '*' wechseln 
3) Fügen Sie ein weiteres Unix-Socket-Verzeichnis hinzu 
unix_socket_directories = '/var/run/postgresql, /var/pgsql_socket' # comma-separated list of directories 
4) Zu diesem Zeitpunkt versuchte der Sudo-Dienst postgresql start zu starten, hatte jedoch keine Berechtigung zum Erstellen der Sperrdatei. 
* 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) Berechtigungen ändern (gefunden von Mark Berrys Kommentar hier
$ Sudo chown root.postgres /var/pgsql_socket
$ Sudo chmod g+wx /var/pgsql_socket
6) Sudo service postgresql start 
Sudo -i -u postgres 
psql 

Das hat endlich für mich funktioniert

5
descript

Ich habe es gelöst. Ich habe gerade einen Softlink erstellt mit:

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

und bearbeitet dann die 

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

(Wenn Sie eine andere Version von Postgresql haben, müssen Sie 9.4 im Pfad ändern.)

Von: 

local all postgres peer

Zu:

local all postgres md5

3
adyouri

Das gleiche Symptom kann durch eine veraltete Sperrdatei /var/run/postgresql/.s.PGSQL.5432.lock verursacht werden. Eines der Symptome ist das psql-Reporting 

psql: Verbindung zum Server konnte nicht hergestellt werden: Keine solche Datei oder Verzeichnis Läuft der Server lokal und akzeptiert Verbindungen auf Unix-Domain-Socket "/var/run/postgresql/.s.PGSQL.5432"?

obwohl es eindeutig einen Socket mit diesem Pfad gibt, wie von netstat -lp --protocol=unix | grep postgres gemeldet

Das Problem kann gelöst werden, indem Sie die Sperrdatei entfernen und postgresql neu starten. Dies ist definitiv weniger invasiv als eine Bereinigung und Neuinstallation.

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

Lösung:

Versuche dies

export LC_ALL="en_US.UTF-8"

und das. ( 9.3 ist meine aktuelle PostgreSQL-Version. Schreiben Sie Ihre Version!)

Sudo pg_createcluster 9.3 main --start
2
bogdanvlviv

Als ich auf diesen Fehler stieß, hörte mein Postgres-Server tatsächlich einen anderen Port (5433). Um dies zu beheben, fügen Sie eine Zeile in Ihrer database.yml hinzu, um Rails anzuweisen, denselben zu verwenden:

port: 5433
1
tobasti

Das bedeutet, dass Ihr Postgres Server nicht läuft.

Prüfen Sie Postgres Servicestatus vom Terminal

Sudo service postgresql status

Aktivieren Sie Postgres Service, falls nicht gestartet

Sudo service postgresql start

ODER

Sudo service postgresql restart

Nun sollte Ihr Befehl funktionieren, wenn Postgres Dienst erfolgreich gestartet wurde.

0
Sumon Sarker

Wenn Sie pg_lsclusters ausführen, werden alle Postgres-Cluster aufgelistet, die auf Ihrem Gerät ausgeführt werdenEg: 

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

wenn der Status nicht läuft 

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

Wenn dieser Vorgang nicht erfolgreich ist, wird der Fehler ... ausgegeben. Mein Fehler war (Sie können das Fehlerprotokoll in /var/log/postgresql/postgresql-9.6-main.log sehen) 

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`

stellen Sie sicher, dass postgres der Besitzer von /var/lib/postgresql/version_no/maineg ist: Sudo chown postgres -R /var/lib/postgresql/9.6/main/

Es passierte mir und es stellte sich heraus, dass ich den Postgres-Benutzer irrtümlich aus der Gruppe "ssl-cert" entfernt habe. Führen Sie den folgenden Code aus, um das Problem mit der Benutzergruppe und die Berechtigungen zu beheben

#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