Kürzlich wurde mein Computer von Mac OS X Lion (10.7.4) auf Mountain Lion (10.8) aktualisiert, und ich denke, es hat meine PostgreSQL-Installation beschädigt. Es wurde ursprünglich über Homebrew installiert. Ich bin kein DBA, aber ich hoffe, jemand kann mir sagen, wie ich das beheben kann.
Ich konnte keine Verbindung herstellen (konnte es aber vor dem Mountain Lion):
$ psql -U rails -d myapp_development
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"?
Aber Postgres läuft immer noch klar:
$ ps aux | grep postgres
meltemi 2010 0.0 0.0 2444124 5292 ?? Ss Wed01PM 0:00.02 postgres: rails myapp_development [local] idle
meltemi 562 0.0 0.0 2439312 592 ?? Ss Wed12PM 0:02.28 postgres: stats collector process
meltemi 561 0.0 0.0 2443228 1832 ?? Ss Wed12PM 0:01.57 postgres: autovacuum launcher process
meltemi 560 0.0 0.0 2443096 596 ?? Ss Wed12PM 0:02.89 postgres: wal writer process
meltemi 559 0.0 0.0 2443096 1072 ?? Ss Wed12PM 0:04.01 postgres: writer process
meltemi 466 0.0 0.0 2443096 3728 ?? S Wed12PM 0:00.85 /usr/local/bin/postgres -D /usr/local/varpostgres -r /usr/local/var/postgres/server.log
Und es reagiert auf Anfragen (sowohl auf eine Test-Datenbank als auch auf die Entwicklungs-Datenbank) von einer lokalen Rails-App
User Load (0.2ms) SELECT "users".* FROM "users"
Rendered users/index.html.haml within layouts/application (1.3ms)
Es scheint kein /var/pgsql_socket/
Verzeichnis zu geben, geschweige denn die /var/pgsql_socket/.s.PGSQL.5432
oben erwähnte Socket-Datei!?! Vielleicht hat die Installation von Mountain Lion das ausgelöscht?
$ ls -l /var/ | grep pg
drwxr-x--- 2 _postgres _postgres 68 Jun 20 16:39 pgsql_socket_alt
Wie kann ich das beheben?
quelle
/usr/local/var/postgres/server.log
?$PATH
Änderungen mit dem Upgrade/usr/bin
vor uns liegen/usr/local/bin
und ich denke, dass Mountain Lion mit vorinstalliertem PostgreSQL geliefert werden kann!?! Untersuchung ...Antworten:
Ich stellte fest, dass ich ein äußerst ähnliches Problem hatte, nämlich, dass postgres einen Socket öffnete, in
/var/pgsql_socket_alt
dem keine meiner Software das Aussehen erwartet, aber die Lösung meines Problems war nicht nur ein Problem mit meinem$PATH
.Ich hatte das Verzeichnis zu erstellen
/var/pgsql_socket
, ist es mir chown und Satzunix_socket_directory
inpostgresql.conf
(in/usr/local/var/postgres
) in das Verzeichnis, dann die Verwendungpg_ctl
binär in/usr/local/bin
dem richtigen Postgres - Server erfolgreich gestartet werden (das ist , wo$PATH
kommt - stellen Sie sicher ,which pg_ctl
Entschlüsse zu/usr/local/bin/pg_ctl
, oder einfach nur immer nennen Sie es explizit).Dies könnte anderen Benutzern helfen, die diese Frage über die
/var/pgsql_socket_alt
Erwähnung finden.quelle
$PATH
wie ich es getan habe.Eine plausible und typische Erklärung wäre, dass das
psql
, was mit Homebrew geliefert wird/usr/local/bin/psql
, sich von dem unterscheidet, das in Ihrem $ PATH vorkommt/usr/bin/psql
(im Lieferumfang von OS X enthalten). Vielleicht möchten Sie es mit dem vollständigen Pfad versuchen:$ /usr/local/bin/psql -U rails -d myapp_development
Außerdem enthält die
ps
Ausgabe Ihrer Frage etwas ziemlich Ungewöhnliches : Der postgres-Server wird unter einemmeltemi
Unix-Benutzer ausgeführt, wobei im Allgemeinen der dediziertepostgres
Unix-Benutzer dafür verwendet wird.quelle
_postgres
(mit Unterstrich) für Benutzer / Gruppe sind mir unbekannt. Ist das ein Artefakt oder erwartet?$PATH
Problem zu sein, wie Sie angegeben haben. Die Dinge funktionieren wie zuvor, wenn ich/usr/local/bin/psql
auf die Datenbank zugreife. Entweder hatte Lion kein PostgreSQL-System oder mein $ PATH wurde anders eingerichtet. Es ist ein Jahr her, seit ich das letzte Mal damit durcheinander war, also kann ich mich nicht genau erinnern. Was den Unix-Benutzer betrifft ... Bei einer Homebrew-Installation von PostgreSQL wird der Server von launchd gestartet, und der Benutzer wird standardmäßig auf den lokalen Benutzer eingestellt, der ihn installiert hat. Unter Mac OS X Server, unter dem PostgreSQL automatisch gestartet wird, sieht die Einrichtung anders auspostgres
.Ich kenne keine Konfigurationsdatei für den psql-Client. Psql berücksichtigt jedoch eine Reihe von Umgebungsvariablen, die mit Befehlszeilenoptionen korrelieren.
Damit psql automatisch den Socket Ihrer Wahl verwendet, können Sie die Variable PGHOST auf das Verzeichnis setzen, das den Socket enthält. dh
quelle
Versuchen:
oder
quelle
Spät, aber ich fand das hilfreich: http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion
Das war für Lion, aber ich hatte die gleichen Probleme wie in diesem Thread, nachdem ich von 10.6.8 auf Mountain Lion aktualisiert und PostgreSQL zuvor über HomeBrew installiert hatte, während ich auf 10.6.8 war. Ich hatte auch den mysteriösen
/var/pgsql_socket_alt
Ordner nach dem Upgrade, aber ich habe ihn gerade entfernt und/var/pgsql_socket
wie von @wolftron vorgeschlagen erstellt. Dies war jedoch nicht die endgültige Lösung.Wenn ich
unix_socket_directory
leer gelassen / in auskommentiert habepostgresql.conf
, würden alle Projekte, die vor dem Upgrade vorhanden waren, beanstanden, dass das Socket-In/var/pgsql_socket
fehlte. Aber wenn ich conf und hard-coded ändern würdevar/pgsql_socket
, würden sich alle neuen Projekte darüber beschweren, dass der Socket in/tmp
fehlt. Sehr frustrierend ... bis ichpg gem
in einem Projekt vor 10.8 (gem uninstall pg && gem install pg
) neu installiert undunix_socket_directory
in derconf
Datei auskommentiert habe. Nach einem schnellenpg_ctl
Neustart des Servers funktionierten sowohl neue als auch alte Projekte. Meine Pgsql-Buchse lebt/tmp
jetzt, fwiw.Nebenbemerkung: Wenn Sie
activerecord-postgresql-adapter
gem verwenden, deinstallieren Sie es zuerst, installieren Sie pg erneut und installieren Sie es dannactiverecord-postgresql-adapter
erneut.quelle
Ich habe mich gerade erst bei der dba SE angemeldet, kann also anscheinend keinen Kommentar zum entsprechenden Beitrag abgeben (was für ein Blödsinn!).
Ich war jedoch zuversichtlich, dass ich mich im selben Boot wie @thure befand. Ich hatte sichergestellt, dass / usr / local / bin früher in meinem PATH war als / usr / bin, und überprüft, mit welchen Binärdateien die Shell gehasht hat,
which
und so weitertype
.Ich sah die gleichen Symptome wie @thure. Dann hatte ich eine Offenbarung; Ich erkannte, dass ich den
pg
Edelstein (ich verwende Ruby) in einer Shell neu erstellt hatte, deren PATH durch den path_helper von Mac beeinträchtigt wurde (der von / etc / profile ausgeführt wird und / usr / bin vor / usr / local / bin setzt). .Ich habe pg deinstalliert und es in einer Shell neu installiert, deren PATH korrekt war. Plötzlich konnte ich mich verbinden!
Stellen Sie also sicher, dass Sie Ihre Sprachbindungen neu kompilieren, und lassen Sie sie die richtige Kopie von (vermutlich) finden
pg_config
.quelle
Ich fand diese Antwort: https://stackoverflow.com/questions/10763143/in-rails-couldnt-create-database-for-adapter-postgresql Und so einfach es war, es funktionierte für mich ... lief ein
$bundle update
und es fing wieder an zu arbeiten.quelle
Ich fand, dass das Verknüpfen des tatsächlichen Standorts mit dem erwarteten Standort gut funktioniert:
In Anlehnung an die akzeptierte Antwort von @thure, aber einfacher.
quelle
Hier ist es, 2016, El Capitan ist da draußen und Apple ändert ständig die Dinge. Postgres wird als Teil des Betriebssystems installiert und die Konfigurationsdatei postgres legt die Eigenschaft unix_socket_directories in postgresql.conf auf / tmp fest. Der Socket befindet sich in /tmp/.s.PGSQL.5432. Ich konnte das Problem umgehen, indem ich Folgendes ausführte:
Hoffe das hilft jemandem.
quelle
Suchen Sie nach der richtigen Socket-Datei
Rufen Sie aus dem Ergebnis den Pfad zur Datei ab und verwenden Sie den Pfad mit dem Parameter "-h" im Befehl psql
So verbinde ich mich beispielsweise mit der Kalender- und Kontaktdatenbank von macOS Server (innerhalb einer SSH-Sitzung mit dem Server):
Dann würde die Socket-Datei am Pfad verwendet, um eine Verbindung herzustellen.
quelle
Standardmäßig versucht postgres, eine Verbindung über Unix-Domain-Sockets herzustellen. UNIX-DOMAIN-BUCHSE
Dies passierte mir, als ich eine Postgres-Instanz auf Docker ausführte. Sie müssen sehen, welche Art von Verbindung Ihr Server akzeptiert. Für mich war es eindeutig TCP und kein Unix-Domain-Socket.
Durch das Hinzufügen eines Flags zum Akzeptieren des Hosts wurde die Verbindung zum korrekten Pfad umgeleitet und das Problem behoben.
PS: Unix-Domain-Sockets funktionieren auf Kernel-Ebene und die Verbindung muss nicht den gesamten Jazz durchlaufen, der für TCP-Verbindungen erforderlich ist. Sie sind recht schnell und effizient, wenn Sie im Rahmen der Interprozesskommunikation eine Verbindung zu Ihrem eigenen Computer von einem anderen Prozess aus herstellen möchten.
quelle
Hallo Welt :)
Der beste, aber seltsame Weg für mich war, die nächsten Dinge zu tun.
1) Laden Sie postgres93.app oder eine andere Version herunter . Fügen Sie diese App in den Ordner / Programme / hinzu.
2) Fügen Sie der Datei eine Zeile (Befehl) hinzu
Es ist ein Weg.bash_profile
(die sich in meinem Ausgangsverzeichnis befindet):psql
vonPostgres93.app
. Die Zeile (Befehl) wird bei jedem Start der Konsole ausgeführt.3) Starten Sie
Postgres93.app
aus dem/Applications/
Ordner. Es startet einen lokalen Server (Port ist "5432" und Host ist "localhost").4) Nach all diesen Manipulationen war ich froh,
$ createuser -SRDP user_name
Befehle auszuführen und zu sehen, dass es funktionierte!Postgres93.app
kann jedes Mal ausgeführt werden, wenn Ihr System gestartet wird.5) Auch wenn Sie Ihre Datenbanken grafisch anzeigen möchten, sollten Sie installieren
PG Commander.app
. Es ist eine gute Möglichkeit, Ihre Postgres-Datenbank als hübsche Datentabellen zu sehenNatürlich ist es nur für lokale Server hilfreich. Ich freue mich, wenn diese Anleitung anderen hilft, die sich mit diesem Problem befasst haben.
quelle
Ich kann den Link, über den ich dieses Nugget gefunden habe, nicht schnell finden, aber es hat bei mir funktioniert.
export PGHOST = localhost
Oh, hier ist der Link. https://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser
quelle
Ich habe den gleichen Fehler beim Versuch,
psql
über die Befehlszeile auszuführen . Es stellte sich heraus, dass meine Lösung viel einfacher war. Ich hatte den Listening-Port in der Konfigurationsdatei falsch konfiguriert: /etc/postgresql/9.4/main/postgres.conf . Ich hatte den Port von Port = 5432 in Port = 5433 geändert. Als ich ihn wieder in 5432 änderte, funktionierte er wie erwartet.Um zu testen, ob Sie etwas Ähnliches getan haben, können Sie Folgendes ausführen:
$ psql -p5433
Es gibt eine Reihe nützlicher Optionen für den Befehl psql, die Sie hier finden: http://www.postgresql.org/docs/9.4/static/app-psql .html, damit Sie Ihre EIGENE bestimmte Fehlkonfiguration testen können. Natürlich können Sie auch einfach Ihre letzten Konfigurationsänderungen aus den * .conf-Dateien entfernen, um zu testen, ob diese die Ursache für Ihr Problem sind. Ich denke, es ist auf jeden Fall einen Blick wert, bevor Sie sich mit Dateiberechtigungen und Eigentumsrechten beschäftigen. (Vergiss nur nicht/etc/init.d/postgresql restart
)Was ich nicht finden konnte, war die Konfigurationsdatei, die die Standardwerte für den Befehl psql CLI festlegt. Kann das bitte jemand kommentieren?
Für mich kehre ich immer zu meinem ersten Prinzip der Programmierung zurück: "Ich bin normalerweise die Quelle eines gegebenen Fehlers!"
quelle