Ich habe den Bitnami Django-Stack installiert, der PostgreSQL 8.4 enthielt.
Beim Ausführen psql -U postgres
erhalte ich folgende Fehlermeldung:
psql: 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"?
PG läuft definitiv und die pg_hba.conf
Datei sieht so aus:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Was gibt?
"Beweis", dass pg läuft:
root@assaf-desktop:/home/assaf# ps axf | grep postgres
14338 ? S 0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 5432
14347 ? Ss 0:00 \_ postgres: writer process
14348 ? Ss 0:00 \_ postgres: wal writer process
14349 ? Ss 0:00 \_ postgres: autovacuum launcher process
14350 ? Ss 0:00 \_ postgres: stats collector process
15139 pts/1 S+ 0:00 \_ grep --color=auto postgres
root@assaf-desktop:/home/assaf# netstat -nltp | grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 14338/postgres
tcp6 0 0 ::1:5432 :::* LISTEN 14338/postgres
root@assaf-desktop:/home/assaf#
postgresql
Assaf Lavie
quelle
quelle
Antworten:
Dieses Problem tritt bei der Installation des
postgres
Pakets ohne Versionsnummer auf. Obwohlpostgres
installiert wird und es sich um die richtige Version handelt, wird das Skript zum Einrichten des Clusters nicht ordnungsgemäß ausgeführt. Es ist ein Verpackungsproblem.Wenn Sie mit
postgres
einem Skript vertraut sind, können Sie es ausführen, um diesen Cluster zu erstellen und loszulegenpostgres
. Es gibt jedoch einen einfacheren Weg.Zuerst die alte Postgres-Installation löschen. Das Problem liegt derzeit bei 9.1, daher gehe ich davon aus, dass Sie dies installiert haben
Jetzt einfach neu installieren
Notieren Sie den Paketnamen mit der Versionsnummer. HTH.
quelle
Die Fehlermeldung bezieht sich auf einen Unix-Domain-Socket, daher müssen Sie Ihren
netstat
Aufruf optimieren , um sie nicht auszuschließen. Versuchen Sie es also ohne die Option-t
:Ich würde vermuten, dass der Server tatsächlich auf dem Socket lauscht
/tmp/.s.PGSQL.5432
und nicht,/var/run/postgresql/.s.PGSQL.5432
dass Ihr Client versucht, eine Verbindung herzustellen. Dies ist ein typisches Problem bei der Verwendung von handkompilierten PostgreSQL-Paketen oder PostgreSQL-Paketen von Drittanbietern unter Debian oder Ubuntu, da die Standardquelle für das Unix-Domain-Socket-Verzeichnis ist, diese/tmp
jedoch durch das Debian-Paket geändert wird/var/run/postgresql
.Mögliche Problemumgehungen:
/opt/djangostack-1.3-0/postgresql/bin/psql
). Deinstallieren Sie möglicherweise die von Ubuntu gelieferten Pakete vollständig (möglicherweise schwierig aufgrund anderer umgekehrter Abhängigkeiten).-H localhost
diese Option , um eine Verbindung über TCP / IP herzustellen.-h /tmp
oder eine gleichwertigePGHOST
Einstellung, um auf das richtige Verzeichnis zu verweisen.quelle
Das funktioniert bei mir:
Edit: postgresql.conf
Aktivieren oder hinzufügen:
Starten Sie das Datenbankmodul neu:
Sie können die Datei auch überprüfen
pg_hba.conf
Und fügen Sie Ihr Netzwerk oder Ihre Host-Adresse hinzu:
quelle
Mit dieser Option können Sie
psql -U postgres -h localhost
erzwingen, dass die Verbindung über TCP statt über UNIX-Domänensockets hergestellt wird. Ihrenetstat
Ausgabe zeigt, dass der PostgreSQL-Server den Port 5432 von localhost überwacht.Sie können herausfinden, welcher lokale UNIX-Socket vom PostgrSQL-Server verwendet wird, indem Sie einen anderen Aufruf von netstat verwenden :
In jedem Fall werden die Schnittstellen konfiguriert, auf denen der PostgreSQL-Server lauscht
postgresql.conf
.quelle
Erstelle einfach einen Softlink wie diesen:
quelle
Ich mache es so:
Wählen Sie Ihre bevorzugten Ländereinstellungen aus und führen Sie sie aus
(9.5 ist meine Version von postgresql)
und dann klappt es!
quelle
service postgresql restart
aber es besagt, dass ich keinen postgresql-Cluster habe. Dann finde ich den Weg, um mir zu helfen :)dpkg-reconfigure locales
ist verdammt wichtig.Ich musste PostgreSQL 8.1 unter Debian Squeeze kompilieren, weil ich Project Open verwende, das auf OpenACS basiert und nicht auf neueren Versionen von PostgreSQL ausgeführt werden kann.
Die Standard-Kompilierungskonfiguration setzt das
unix_socket
in/tmp
, aber Project Open, das auf PostgreSQL basiert, würde nicht funktionieren, da es nach demunix_socket
at sucht/var/run/postgresql
.Es gibt eine Einstellung in
postgresql.conf
, um die Position der Steckdose festzulegen. Mein Problem war, dass ich entweder festlegen konnte/tmp
undpsql
arbeitete, aber kein Projekt offen hatte, oder dass ich festlegen konnte/var/run/postgresql
undpsql
nicht funktionierte, aber ein Projekt offen hatte.Eine Lösung für das Problem besteht darin, den Socket zu setzen
/var/run/postgresql
und dannpsql
auf Peters Vorschlag folgendermassen auszuführen :Dies wird lokal mit lokalen Berechtigungen ausgeführt. Der einzige Nachteil ist, dass es mehr tippt als nur "psql".
Der andere Vorschlag, den jemand machte, war, eine symbolische Verbindung zwischen den beiden Orten herzustellen. Dies funktionierte auch, aber der Link verschwand beim Neustart. Es ist vielleicht einfacher, einfach das Argument -h zu verwenden, aber ich habe den symbolischen Link aus dem PostgreSQL-Skript in erstellt
/etc/init.d
. Ich habe den Befehl zum Erstellen eines symbolischen Links im Abschnitt "Start" platziert. Wenn ich einen Stopp- und Startbefehl gebe oder einen Neustartbefehl gebe, wird natürlich versucht, eine vorhandene symbolische Verknüpfung wiederherzustellen, aber abgesehen von einer Warnmeldung liegt darin wahrscheinlich kein Schaden.In meinem Fall anstelle von:
ich habe
und haben den unix_socket explizit auf
/var/run/postgresql/.s.PGSQL.5432
in gesetztpostgresql.conf
.quelle
Lösung:
Mach das
und das. ( 9.3 ist meine aktuelle PostgreSQL-Version. Schreiben Sie Ihre Version!)
quelle
Wenn Ihr Postgres-Dienst fehlerfrei ausgeführt wird oder wenn beim Starten des Postgres-Dienstes kein Fehler auftritt und der genannte Fehler weiterhin auftritt, gehen Sie folgendermaßen vor
Schritt 1: Beim Ausführen
pg_lsclusters
werden alle Postgres-Cluster aufgelistet, die auf Ihrem Gerät ausgeführt werdenz.B:
Höchstwahrscheinlich ist der Status in Ihrem Fall und im Postgres-Dienst nicht verfügbar
Schritt 2: Starten Sie den pg_ctlcluster neu
Schritt 3: Schritt 2 ist fehlgeschlagen und hat einen Fehler ausgelöst
Wenn dieser Vorgang nicht erfolgreich ist, wird ein Fehler ausgegeben. Sie können das Fehlerprotokoll sehen
/var/log/postgresql/postgresql-9.6-main.log
Mein Fehler war:
Schritt 4: Überprüfen Sie den Besitz von Postgres
Stellen Sie sicher, dass dies
postgres
der Eigentümer von ist/var/lib/postgresql/version_no/main
Wenn nicht, renne
Schritt 5: Überprüfen Sie, ob der Benutzer postgres zur Benutzergruppe ssl-cert gehört
Es stellte sich heraus, dass ich den Postgres-Benutzer fälschlicherweise aus der
ssl-cert
Gruppe entfernt hatte. Führen Sie den folgenden Code aus, um das Benutzergruppenproblem zu beheben und die Berechtigungen zu korrigierenquelle
In meinem Fall wurde es durch einen Tippfehler verursacht, den ich während der Bearbeitung gemacht habe
/etc/postgresql/9.5/main/pg_hba.conf
Ich habe mich verändert:
zu:
Musste
MD5
aber klein geschrieben seinmd5
:quelle
trusted
statttrust
und hat den Dienst nicht neu, und es brach erst am nächsten Tag , als ich bereits vergessen , was ich geändertIch fand die Deinstallation von Postgres nicht überzeugend. Dies hilft, mein Problem zu lösen:
Starten Sie den Postgres-Server:
Stellen Sie sicher, dass der Server beim Booten startet:
Detaillierte Informationen finden Sie auf der DigitalOcean-Website hier.
quelle
Ich konnte dieses Problem mit meinem Postgres-9.5-Server nicht lösen. Nach 3 Tagen ohne Fortschritt, bei denen ich alle Korrekturen auf dieser und anderen Websites durchgeführt habe, habe ich beschlossen, den Server neu zu installieren und 5 Tage Arbeit zu verlieren. Aber ich habe das Problem auf der neuen Instanz repliziert. Dies könnte eine Perspektive bieten, wie Sie das Problem beheben können, bevor Sie den katastrophalen Ansatz wählen, den ich gewählt habe.
Deaktivieren Sie zunächst alle Protokolleinstellungen in postgresql.conf. Dies ist der Abschnitt:
Kommentiere alles in diesem Abschnitt aus. Starten Sie dann den Dienst neu.
Verwenden Sie beim Neustart
/etc/init.d/postgresql start
oderrestart
ich fand es hilfreich, beim Neustart im Superuser-Modus zu sein. Ich hatte ein X-Fenster nur für diese Operation geöffnet. Diesen Superuser-Modus können Sie mit einrichtensudo -i
.Stellen Sie sicher, dass der Server mit diesem einfachen Befehl erreichbar ist:
psql -l -U postgres
Wenn sich das nicht beheben lässt, überlegen Sie Folgendes:
Ich habe den Eigentümer für viele Ordner geändert, als ich versucht habe, eine Lösung zu finden. Ich wusste, dass ich wahrscheinlich versuchen würde, diese Ordnereigentümer und
chmod
s für zwei weitere Tage zurückzusetzen. Wenn Sie bereits mit diesen Ordnereigentümern in Konflikt geraten sind und Ihren Server nicht vollständig bereinigen möchten, beginnen Sie, die Einstellungen für alle betroffenen Ordner zu verfolgen, um sie auf den ursprünglichen Zustand zurückzusetzen. Möglicherweise möchten Sie versuchen, eine parallele Installation auf einem anderen System durchzuführen und den Besitz und die Einstellungen aller Ordner systematisch zu überprüfen. Langwierig, aber Sie können möglicherweise auf Ihre Daten zugreifen.Sobald Sie Zugriff haben, ändern Sie systematisch jede relevante Zeile im
# ERROR REPORTING AND LOGGING
Abschnitt derpostgresql.conf
Datei. Neustart und Test. Ich stellte fest, dass der Standardordner für die Protokolle einen Fehler verursachte. Ich habe ausdrücklich auskommentiertlog_directory
. Der Standardordner, in den das System die Protokolle ablegt, ist dann/var/log/postgresql
.quelle
Möglicherweise ist dies passiert, weil Sie die Berechtigungen des
/var/lib/postgresql/9.3/main
Ordners geändert haben .Versuchen Sie es mit dem folgenden Befehl auf 700 zu ändern:
quelle
Dies hängt nicht genau mit der Frage zusammen, da ich Flask verwende, aber dies war der genaue Fehler, den ich erhalten habe, und dies war der relevanteste Thread, um Ideen zu erhalten.
Mein Setup: Windows-Subsystem für Linux, Docker-Compose mit Makefile mit Dockerfile, Flask, Postgresql (unter Verwendung eines Schemas aus Tabellen)
Um eine Verbindung zu postgres herzustellen, richten Sie Ihre Verbindungszeichenfolge wie folgt ein:
ANMERKUNG: Ich habe nie eine IP (z. B. localhost, 127.0.0.1) für die Arbeit mit einer Methode in diesem Thread erhalten. Die Idee, den Containernamen anstelle von localhost zu verwenden, kam von hier: https://github.com/docker-library/postgres/issues/297
Stellen Sie Ihr Schema ein:
Legen Sie beim Einrichten Ihrer Sitzung den Suchpfad für Ihre Funktionen fest:
quelle
Ich hatte genau das gleiche Problem, das Peter Eisentraut beschrieb. Mit dem
netstat -nlp | grep 5432
Befehl konnte ich sehen, dass der Server den Socket abhörte/tmp/.s.PGSQL.5432
.Um dies zu beheben, bearbeiten Sie einfach Ihre
postgresql.conf
Datei und ändern Sie die folgenden Zeilen:Führen
service postgresql-9.4 restart
Sie nun (Ersetzen Sie 9-4 durch Ihre Version) aus, und die Remoteverbindungen sollten jetzt funktionieren.Um nun lokale Verbindungen zuzulassen, erstellen Sie einfach einen symbolischen Link zum
/var/run/postgresql
Verzeichnis.Vergessen Sie nicht, sicherzustellen, dass Sie auch
pg_hba.conf
richtig konfiguriert sind.quelle
In meinem Fall musste ich nur Folgendes tun:
und dann
Das hat gut funktioniert. Ich hoffe es hilft. Prost :) .
quelle
Finden Sie Ihre Datei:
Ergebnis:
Login als postgres Benutzer:
quelle
Ich hatte das gleiche Problem (auf Ubuntu 15.10 (schlau)).
sudo find / -name 'pg_hba.conf' -print
odersudo find / -name 'postgresql.conf' -print
leer aufgetaucht. Davor schienen mehrere Instanzen von postgresql installiert zu sein.Möglicherweise haben Sie ähnliche Probleme, wenn Sie eine Liste mit installierten oder Abhängigkeitsproblemen anzeigen
und so weiter.
In diesem Fall müssen Sie
sudo apt-get autoremove
jedes Paket 1 zu 1.Dann folge dem Brief und es wird dir gut gehen. Vor allem, wenn es darum geht, zuerst Schlüssel zu importieren und zur Quellliste hinzuzufügen
Wenn Sie wily nicht verwenden, ersetzen Sie es
wily
durch Ihre Version, dh durch die Ausgabe vonlsb_release -cs
Und dann sollten Sie in Ordnung sein und in der Lage sein, Benutzer zu verbinden und zu erstellen.
Erwartete Ausgabe:
Quelle meiner Lösungen (Credits)
quelle
Während ich das gleiche Problem hatte, habe ich etwas anderes ausprobiert:
Ich habe den postgresql-Daemon manuell gestartet:
Also , was ich tat , war eine untere Grenze für setzen
shared_buffers
undmax_connections
inpostgresql.conf
undrestart
den Service.Dies hat das Problem behoben!
Hier ist das vollständige Fehlerprotokoll:
quelle
Nach vielen anstrengenden Versuchen habe ich die Lösung auf Basis anderer Beiträge gefunden!
quelle
Erstellen Sie das postgresql- Verzeichnis in run und führen Sie dann den folgenden Befehl aus.
quelle
Fügen Sie einfach / tmp unix_socket_directories hinzu
postgresql.conf
quelle