Socket-Datei "/var/pgsql_socket/.s.PGSQL.5432" fehlt in Mountain Lion (OS X Server)

95

Ich habe gerade meinen MacMini Server mit OS X Server von Lion Server auf Mountain Lion aktualisiert. Ich habe das gleiche Problem mit PostgreSQL wie letztes Jahr, als ich Lion Server zum ersten Mal installiert habe.

Wenn ich versuche, einen PostgreSQL-Terminalbefehl auszuführen, wird die folgende berüchtigte Fehlermeldung angezeigt, die viele im Laufe der Jahre erhalten haben:

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

Ich habe versucht, das Passwort für _postgres zu ändern, als ich den Fehler bekam. Ich habe mehrere Befehle ausprobiert, aber den gleichen Fehler erhalten. Ich habe gerade meinen Server neu gestartet, aber kein Glück. Ich habe mich als root angemeldet, um / var / pgsql_socket anzusehen, und der Ordner ist leer. Der Ordner / var / pgsql_socket_alt ist ebenfalls leer.

Ich habe dies online überprüft. Fast alle Lösungen, die ich gelesen habe, einschließlich Stack Overflow, schlagen jedoch vor, PostgreSQL zu entfernen und neu zu installieren. Ich weiß es nicht, aber dies scheint keine plausible Option zu sein, da mehrere Optionen in der Server-App PostgreSQL verwenden. Ich habe den Apple Enterprise Support kontaktiert (keine Vereinbarung) und mir wurde gesagt, dass mein Problem von den Entwicklern gelöst werden muss, die 695 US-Dollar ausgeben würden.

Ich habe eine Website, die gerade nicht verfügbar ist, da ich sie nicht neu erstellen kann. Ich weiß derzeit nicht, an wen ich mich wenden soll, um Hilfe zu erhalten. Ich werde weiterhin online suchen, um zu sehen, ob ich etwas finden kann. Ich hoffe jedoch, dass mir jemand schnell eine Antwort geben kann, damit ich meine Datenbank neu erstellen kann.

Update: 13.12.2012 15:33 GMT-6

Hier ist meine Ausgabe für 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 

Update: 13.12.2012 18:10 GMT-6

Nach intensiver Websuche wurde dieses Video gefunden. Ich konnte PostgreSQL zum Laufen bringen und den Fehler beseitigen. Ich kann eine Verbindung mit pgadmin und phppgadmin herstellen. Ich wollte gerade vor lauter Frustration zu Lion Server zurückkehren. Jetzt muss ich nicht.

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

Pamela Cook - LightBe Corp.
quelle
22
Ihr Problem kocht auf die Tatsache, dass die Mac OS X vorinstalliert Version von PostgreSQL psqlist auf der PATHvor der Version Sie installiert haben . Sie suchen an verschiedenen Stellen nach dem Unix-Socket. Verwenden Sie entweder tcp / ip, indem Sie angeben, -h localhostoder PATHkorrigieren Sie psqles vorzugsweise, damit zuerst das richtige gefunden wird. Die bizarre Entscheidung von Apple, PostgreSQL nicht nur zu bündeln, sondern auch damit herumzuspielen, damit Dinge an nicht standardmäßigen Orten platziert werden, ist die Hauptursache für dieses Problem.
Craig Ringer
3
In OSX gibt es ein anhaltendes Problem, bei dem die Packager beschlossen haben, den Unix-Domain-Socket an einem anderen Ort als normal zu platzieren. Lassen Sie mich suchen ... BRB ... stackoverflow.com/a/8482546/905902
Wildplasser
Ich habe einen alten Pfad in .bashrc kopiert. Ich habe keine andere Version von postgreSQL installiert. Hier ist meine PATH-Anweisung, die Code für RVM enthält. Wenn mir jemand sagen könnte, was ich ändern soll, werde ich das tun. Wenn ich welche psql mache, ist sie in / usr / bin / psql zu finden. Vielen Dank für Ihre Hilfe. PATH = "$ PATH: $ HOME / .rvm / bin: / usr / bin / psql: / usr / lokal: / usr / lokal / sbin: / usr / lokal / bin: / usr / sbin: / usr / bin" Ich suche auch nach der Socket-Datei, während ich als root angemeldet bin.
Pamela Cook - LightBe Corp
1
Für diejenigen, die homebrewund osx@CraigRinger möglicherweise die richtige Antwort für Sie haben, bestätigen Sie mit brew doctor.
Karthik T

Antworten:

299

Ich konnte Folgendes zu meinem .bash_profile hinzufügen, um den Fehler zu vermeiden:

export PGHOST=localhost

Dies funktioniert, weil :

Wenn Sie den Hostnamen weglassen, stellt psql über einen Unix-Domain-Socket eine Verbindung zu einem Server auf dem lokalen Host oder über TCP / IP zu localhost auf Computern her, die keine Unix-Domain-Sockets haben.

Ihr Betriebssystem unterstützt Unix-Domain-Sockets, aber der Unix-Socket von PostgreSQL, der psqlbenötigt wird, ist entweder nicht vorhanden oder befindet sich an einem anderen Speicherort als erwartet.

Die explizite Angabe eines Hostnamens als localhosterzwingt psqldie Verwendung von TCP / IP. Das Festlegen einer Umgebungsvariablen PGHOSTist eine der Möglichkeiten, dies zu erreichen. Es ist im psql-Handbuch dokumentiert .

mmasters
quelle
37
Für alle, die mit einer Rails-App darauf stoßen: Sie können den Host in database.yml angeben.
Dwhalen
12
Was ist das für eine Zauberei? Ich meine, ernsthaft. Könntest du erklären?
Sreejith Ramakrishnan
1
Ich komme immer wieder auf diese Antwort zurück! Rettete mein Leben wieder. Dieses Snippet gehört wirklich auf diese Seite, postgresapp.com/documentation/cli-tools.html .
Sambecker
1
Ich weiß nicht warum, aber es funktioniert bei mir! Ich habe dieses Problem in Rails 5 festgestellt, als ich 'Rails db: create' verwendet habe, aber ich habe das host: localhostin database.yml bereits festgelegt . @ Dwhalen
Spark.Bao
1
Dies funktionierte für Rails 5.2 ohne Änderung database.yml, als dieser Fehler nach dem Downgrade von Postgres auf eine ältere, von Homebrew verwaltete Version auftrat.
SexxLuthor
37

Versuchen Sie Folgendes in die Konsole einzufügen:

$ mkdir /var/pgsql_socket/ 

$ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/
Bryan Algutria
quelle
Endlich habe ich diese Antwort bekommen.
Abs
Gut. Obwohl ich glaube zu wissen, warum dies funktioniert, wäre eine etwas ausführlichere Erklärung hilfreich. Diese Lösung ist besser als die akzeptierte Antwort, nur die Details fehlen.
Glutexo
23

Ich konnte das Problem lösen, indem ich einfach 127.0.0.1 für die PostgreSQL-Hostadresse ausfüllte, anstatt sie leer zu lassen. (Django Beispiel)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'USER': 'database_user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '',
        }
}
Nick Woodhams
quelle
1
Ich fühle mich jetzt irgendwie dumm, ich habe versucht, dieses Problem für ungefähr 2 Tage zu beheben. Unter Windows habe ich '127.0.0.1' verwendet, aber dann habe ich meinen Code in die Produktion verschoben (Debian 7) und musste ihn in '' ändern. Es ist irgendwie seltsam, dass sie eine solche Fehlermeldung geben, die einen glauben lässt, dass das Problem woanders liegen könnte.
Fang_dejavu
10

Öffnen Sie 'postgresql.conf' in Ihrem bevorzugten Editor. Suchen Sie nach der Variablen 'unix_socket_directories', sie wird höchstwahrscheinlich so aussehen:

unix_socket_directories = '/private/tmp/'

Ändern Sie die Zeile in diese:

unix_socket_directories = '/var/pgsql_socket/'

Beachten Sie, wenn Sie möchten, dass die Socket-Dateien in mehr als einem Verzeichnis durch Kommas getrennt werden.

Craig Thomas
quelle
Dies hatte den gewünschten Effekt, dass versucht wurde, den Socket an einer anderen Stelle zu erstellen, der Server jedoch nicht gestartet werden konnte, da er nicht über die Berechtigungen zum Erstellen von Dateien im Verzeichnis / var verfügte. Am Ende habe ich die Konfigurationsdateien auf einer höheren Ebene geändert, um einfach den Socket dort zu verwenden, wo er ursprünglich war. Ziemlich genau wie in dieser Antwort angegeben . Stackoverflow.com/a/29511357/1535177 .
Eosis
7

Wie von anderen in den Kommentaren erwähnt, besteht eine wirklich einfache Lösung für dieses Problem darin, den Datenbank-Host in der Datenbankkonfiguration zu deklarieren. Fügen Sie diese Antwort hinzu, um es jedem, der dies liest, ein wenig klarer zu machen.

Bearbeiten Sie beispielsweise in einer Ruby on Rails-App /config/database.yml:

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

Hinweis: Die letzte Zeile, die hinzugefügt wurde, um den Host anzugeben. Vor dem Update auf Yosemite musste ich den Host nie auf diese Weise angeben.

Hoffe das hilft jemandem.

Prost

David Battersby
quelle
Ich musste meinen Host auf das Verzeichnis einstellen, in dem sich die .s.PGSQL.5432Datei befand.
Eosis
5

Überprüfen Sie den Status der Datenbank:

service postgresql status

Wenn die Datenbank nicht ausgeführt wird, starten Sie die Datenbank:

sudo service postgresql start
Sivakumar RJ
quelle
Ich habe mich an den obigen Fehler gehalten und ihn durch Starten der Datenbank behoben.
Sivakumar RJ
4

Können Sie Ihre postgresql.conf-Datei überprüfen?

Auf welchem ​​Port läuft dein Postgres?

Ich denke, es läuft nicht auf Port 5432. Wenn es nicht auf 5432 ändern

ODER bei Terminalgebrauch

psql -U  postgres -p YOUR_PORT_NUMBER database_name
Jäger
quelle
1
Ich kann den Terminalbefehl nicht ausführen. Ich bekomme den gleichen Fehler. Ich brauche Hilfe, wo ich die Datei postgresql.conf finden kann. Ich hatte einen / var / pgsql-Ordner, als ich Lion Server ausführte. Ich denke das ist jetzt weg. Ich habe gerade meine Ausgabe für den Befehl ps grep veröffentlicht. Ich habe den Wiki-Dienst aktiviert, um PostgreSQL auszuführen. Mir wurde gesagt, dass ich die sudo serveradmin-Befehle verwenden könnte, ohne Server-App-Dienste zu aktivieren, aber sie funktionieren nicht. Ich bin gerade als root angemeldet, damit ich alles tun kann :) Ich habe die Ports im Netzwerkdienstprogramm überprüft. 5432 nicht verwendet.
Pamela Cook - LightBe Corp
2

Ich hatte dieses Problem mit Django.

Beheben Sie das Problem, indem Sie Ihren Hostnamen explizit auf "localhost" setzen.

Ashwin Balamohan
quelle
2

Ich mache in Wort, indem ich dies tue:

dpkg-reconfigure locales

und wählen Sie Ihre bevorzugten Gebietsschemas

pg_createcluster 9.5 main --start

(9.5 ist meine Version von postgresql)

/etc/init.d/postgresql start

und dann das Wort!

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

Ich bekam immer wieder den oben genannten Fehler und keine der oben genannten Lösungen funktionierte für mich. Schließlich löste die folgende Lösung mein Problem unter Mac OS X.

Installieren Sie Postgres mit Brew

brew install postgres

Installieren Sie die Brühdienste

brew tap homebrew/services

So starten Sie postgres als Hintergrunddienst

brew services start postgresql

Postgres manuell stoppen

brew services stop postgresql

Wir können auch Brauservices verwenden, um Postgres neu zu starten

brew services restart postgresql
Sudharshan
quelle
1

Überprüfen Sie, ob der Postgres-Server mit dem folgenden Code ausgeführt wird

sudo service postgresql status

Wenn der Postgres-Server inaktiv ist, schreiben Sie den folgenden Befehl.

sudo service postgresql start
wailinux
quelle
1

Ich habe diesen Fehler erhalten, nachdem mein Computer eingefroren und von selbst neu gestartet wurde. Die Lösung für mich wurde nicht auf dieser Seite gefunden, sondern auf einer anderen sehr hoch bewerteten SO-Frage mit dem gleichen Fehler psql: Verbindung zum Server konnte nicht hergestellt werden: Keine solche Datei oder kein solches Verzeichnis (Mac OS X) . Die Antwort: Löschen Sie einfach diese Datei /usr/local/var/postgres/postmaster.pidund machen Sie brew services restart postgresqlden Trick. Beachten Sie die Warnung in der verknüpften Antwort zum Beenden von Postgres-Prozessen, bevor Sie dies tun. Andernfalls können Sie Ihre Datenbank dauerhaft beschädigen.

Wetjosh
quelle
0

Die Dateiberechtigungen für die Postgres-Datenbank von Mac OS sind eingeschränkt. Diese Berechtigungen werden nach dem Neustart oder Neustart von Postgres zurückgesetzt: z. B. Serveradmin startet Postgres.

Setzen Sie die Berechtigungen oder den Besitz vorübergehend zurück:

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

Das Zurücksetzen von Berechtigungen ist nicht sicher. Installieren Sie daher eine Version der Datenbank, die Sie für eine Lösung besitzen.

Clewis
quelle
0

Es hat eine Weile gedauert, aber ich konnte dies endlich zum Laufen bringen, nachdem ich die angebotenen Vorschläge durchgesehen und zusätzliche Websuchen durchgeführt hatte. Ich habe die Informationen in dem folgenden von Mactasia erstellten YouTube-Video verwendet:

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

Als ich das tat, sah ich die Datei mit .lock als Erweiterung. Ich habe jedoch immer noch den Fehler erhalten, als ich versuchte, den Rails-Server zu starten, als ich wieder mit PostgreSQL an meiner Rails-Anwendung arbeitete. Diesmal habe ich einen Fehler erhalten, dem die Erlaubnis verweigert wurde. Zu diesem Zeitpunkt fiel mir ein, dass ich nicht nur listen_addresses in der Liste ändern musste, sondern auch unit_socket_permissions in 0777 ändern musste. Ich habe mich auch als root angemeldet, um die Berechtigungen für den Ordner var / pgsql_socket zu ändern, auf den ich unter zugreifen konnte Benutzerlevel. Postgres funktioniert jetzt gut. Ich lade gerade meine Daten aus meiner SQL-Sicherung neu.

Was ich nicht verstand war, dass, als ich das Wiki aktiviert hatte, PostgreSQL angeblich funktionierte, als ich ein sudo serveradmin fullstatus postgres machte, aber ich bekam immer noch den Fehler. Naja.

Pamela Cook - LightBe Corp.
quelle
0

Ich habe gerade einen neuen Cluster erstellt und das hat bei mir funktioniert. Ich habe (PostgreSQL) 9.3.20 verwendet:

sudo pg_createcluster 9.3 main --start
Bruno Filgueiras
quelle
0

Entfernen Sie zuerst die installierten Postgres:

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

Dann installieren Sie 'synaptic':

sudo apt-get install synaptic
sudo apt-get update

Dann installieren Sie Postgres

sudo apt-get install postgresql postgresql-contrib
Gurudath BN
quelle
0

Für RubyOnRails-App hinzufügen localhost Wenn Sie eine benutzerdefinierte Postgresql-Version verwenden

# config/database.yml
default: &default
  host: localhost
itsnikolay
quelle