Reparieren von Postgresql nach dem Upgrade auf OSX 10.7 Lion


196

Ich habe kürzlich ein Upgrade auf OSX 10.7 durchgeführt. Zu diesem Zeitpunkt war meine Rails-Installation beim Versuch, eine Verbindung zum psql-Server herzustellen, völlig fehlerhaft. Wenn ich es von der Kommandozeile aus mache

psql -U postgres

Es funktioniert völlig in Ordnung, aber wenn ich versuche, den Rails-Server oder die Rails-Konsole mit demselben Benutzernamen und Passwort auszuführen, wird diese Fehlermeldung angezeigt

...activerecord-3.0.9/lib/active_record/connection_adapters/postgresql_adapter.rb:950:in `initialize': could not connect to server: Permission denied (PGError) 
Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Irgendwelche Ideen, was los sein könnte, wären super hilfreich! Vielen Dank!


Dies traf auch jemanden in meinem Büro; Wir hatten ein ähnliches Problem beim Abrufen der falschen Binärdatei, ein zusätzliches Problem beim Versuch, eine Verbindung zu Domain-Sockets in einem anderen Verzeichnis mit unterschiedlichen Berechtigungen herzustellen, und es sieht so aus, als hätte das Upgrade alle Daten in der lokalen Datenbank verschlungen. Glücklicherweise war dies nur eine Entwicklungsbox, es ist also keine große Sache, aber leicht widerlich. :)

1
Ich habe diesen heute selbst getroffen und mich daran erinnert, Ihre Frage gestern gelesen zu haben. Gut zu sehen, dass @John Wang herausgekommen ist und es erklärt hat :)
Ryan Bigg

Antworten:


291

Es ist ein Pfadproblem. Mac OSX Lion enthält jetzt Postgresql im System. Wenn Sie ein tun which psqlwerden sehen , Sie wahrscheinlich usr/bin/psqlstatt usr/local/bin/psqldem korrekt jemandes HomeBrew. Wenn Sie ausführen brew doctor, sollten Sie eine Meldung erhalten, die besagt, dass Sie usr/local/bindem Kopf Ihrer PATH env-Variablen hinzufügen müssen .

Bearbeiten Sie Ihr .bash_profile oder .profile oder die von Ihnen verwendete Shell und fügen Sie Folgendes hinzu: export PATH=/usr/local/bin:$PATH

Als ersten Export für die PATHdann beenden Sie entweder Ihre Shell-Sitzung oder quellen Ihre Datei mit source ~/.bash_profileund es sollte jetzt wieder OK sein.


12
Dies hat es behoben. Sie können auch / etc /
Greg

153
Beachten Sie außerdem, dass bei der Installation des pg gem VOR dem Korrigieren Ihres Pfads das falsche psql verwendet wird. Wenn ja, deinstallieren Sie das pg gem und installieren Sie es erneut (gem deinstallieren Sie pg && gem install pg).
Troy

4
Ist das für Homebrew? Ports scheint es zu setzen in: / opt / local / lib / postgresql91 Stellen Sie also sicher, dass Sie export PATH = / opt / local / lib / postgresql91 / bin verwenden: $ PATH
Antony Stubbs

1
Mein Pfad wurde korrekt gemeldet, aber Troys Lösung, das pg-Juwel zu deinstallieren und dann den Bundler neu installieren zu lassen, hat den Trick für mich getan.
Tom Harrison

2
Nur zur Klarstellung - es sieht so aus, als ob Sie am besten Ihren Pfad richtig einrichten und dann das pg gem deinstallieren / neu installieren
Jamie Cook

90

Für diejenigen unter Ihnen, die interessiert sind, habe ich die Lösung zusammengestellt. Alles was ich brauchte war hinzuzufügen

host: localhost

auf die database.yml für meine Umgebung und alles war Soße.


9
Seien Sie vorsichtig damit: Diese Einstellung ändert den Zugriff vom Domänensocket auf eine TCP-Verbindung. Während es wahrscheinlich funktioniert, verlieren Sie möglicherweise etwas an Leistung und verwendbaren Ports auf Ihrem Computer, was je nach Einrichtung ein Problem sein kann. Die von John bereitgestellte Lösung ist korrekt.
Pilif

3
'gem uninstall pg' (alle Versionen auswählen), dann 'bundle' erneut, um die pg-Version von Ihrer Gemfile zu installieren, die für mich funktioniert hat.
tmadsen

Danke Dave G, das hat auch bei mir funktioniert. Ich habe 10.7.3 Update installiert und dake: migrate beschwert. Dies hat es behoben.
Sathish

Das hat auch bei mir funktioniert. Allerdings habe ich das Passwort und den Benutzernamen leer gelassen.
Benjamin

Ich würde mir vorstellen, dass dies funktionieren würde, da dadurch eine TCP / IP-Verbindung erzwungen wird.
Duma

46

Ich hatte genau dieses Problem mit Mountain Lion, aber das einzige, was für mich funktionierte, war dieses Update :

Überprüfen Sie, wo sich das eigentliche Ziel befindet:

sudo find / -name .s.PGSQL.5432

Ich musste dieses Verzeichnis erstellen:

mkdir /var/pgsql_socket/

Erstellen Sie dann mit dem Ergebnis aus dem obigen Fund diesen Symlink:

ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

Ich vermute, dass Sie für die meisten Leute auf Mountain Lion einfach das Verzeichnis erstellen und den Symlink erstellen können und keine Zeit damit verschwenden, den Suchvorgang durchzuführen, es sei denn, der Symlink funktioniert nicht.

PS - mein PostgreSQL wurde über das offizielle Installationsprogramm installiert.


Ich habe das Gefühl, es könnte für mich sein, aber ich kann es nicht zum Laufen bringen. Ich bekomme folgendes: ln: / var / pgsql_socket /: Keine solche Datei oder kein solches Verzeichnis
Emmanuel

Entschuldigung, ich habe vergessen, dass ich auch darauf gestoßen bin. Zusätzlicher Schritt zur Antwort hinzugefügt.
Ben

Segne dich, Ben. Sehr geschätzt.
Matt

29

Wenn das Problem weiterhin besteht, nachdem Sie den Pfad geändert haben (wie bei mir), versuchen Sie dies auch ...

gem pristine pg

Es scheint, dass das Problem (teilweise) im pg-Edelstein selbst liegt. Beim Erstellen wird herausgefunden, wo sich der Domain-Socket befinden sollte. Wenn Sie den Speicherort des Domain-Sockets nachträglich ändern, scheint er erst wirksam zu werden, wenn Sie den Edelstein neu erstellen.


Dies funktionierte für mich, selbst nachdem ich den PFAD repariert und den pg-Edelstein ohne makellosen neu installiert hatte.
Elliot Winkler

Vielen Dank für diesen Tipp, Darren
bhinks

15

Für diejenigen, die direkt vom offiziellen Installationsprogramm installiert haben, funktioniert das Hinzufügen des Hosts zum Befehl ohne Pfadänderungen:

psql -h localhost -U postgres

5

Ich hatte das gleiche Problem und hatte Probleme, John Wangs Lösung zum Laufen zu bringen. Wie Darren bemerkte, gibt es ein Problem mit dem pg-Edelstein. Damit es funktioniert, musste ich:

gem uninstall pg

Dann neu installieren.

Was es zum Laufen gebracht hat.


Ich musste das zweimal ausführen ... seltsam. Ich habe pg deinstalliert und dann das Bundle installiert und es ist fehlgeschlagen. Dann habe ich einfach pg installiert und es hat funktioniert. Vielen Dank!
Dustin

3

Ich bin auch darauf gestoßen, aber ich hatte selbst Postgres installiert (nicht mit Homebrew). Wenn dies der Fall ist, müssen Sie den alten Pfad zu psql finden (der möglicherweise / usr / local / bin ist, für mich jedoch / usr / local / pgsql / bin) und diesen Ihrem $ PATH voranstellen.

(vorher) which psql=> / usr / bin / psql

(fix) export PATH = / usr / local / psql / bin: $ PATH

(nach) `which psql '=> / usr / local / psql / bin

John Wangs Vorschlag, das source ~/.bash_rcspäter zu Ihrem bash_rc hinzuzufügen, ist golden.



1

Ich bin mit den am besten bewerteten Antworten nicht zufrieden, da sie entweder betriebssystemspezifisch sind oder Postgres neu zuordnen, um TCP anstelle von Domain-Sockets zu verwenden, wie von @pilif hervorgehoben. Ich habe eine andere Lösung gesehen, bei der die Standardpfade auf Systemebene neu angeordnet werden, um den Pfad von Brew vor einem Kernsystempfad zu überprüfen. Dies scheint jedoch gefährlich zu sein, da dies Auswirkungen auf alle anderen Kollisionen von Anwendungsnamen wie diese haben kann.

Diese Seite beschreibt eine Lösung, die mein Kollege gefunden hat. Es kommt darauf an, ein einzelnes Shell-Skript auszuführen, das dies tut

  1. Sichern Sie die Postgres 8.4-Dateien in einem separaten Verzeichnis
  2. Symlink die Installation von Postgres durch das Gebräu

Dies ist mit der Einschränkung verbunden, dass der Standard-Postgres des Systems das ist, was Brew installiert hat. Sie müssen also ein Urteil darüber fällen, ob dies für Sie richtig ist. Ich sehe mich nicht in Postgres 8.4 speziell über 9.x, sondern in YMMV


1

Eine andere mögliche Lösung, die für mich funktioniert hat, ist das Zurücksetzen der Postmaster-Datei durch Löschen. Einfach ausführen:

rm /usr/local/var/postgres/postmaster.pid 

Es lohnt sich, das Protokoll auf Fehler zu überprüfen, die Sie hier finden:

/usr/local/var/postgres/server.log

Die Fehlermeldung, die ich hatte, war:

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 161) running in data directory 
"/usr/local/var/postgres"?

Danach hat alles super geklappt.


Ich hatte das Problem nur über die Kommandozeile. Das Entfernen der Datei /usr/local/var/postgres/postmaster.pid hat mein Problem behoben.
Michael A.

0

In meinem Fall wurde der Server aufgrund falscher Einstellungen für den gemeinsam genutzten Speicher nicht gestartet. Zuerst war ich verwirrt, weil mehrere Postgres-Prozesse ausgeführt wurden, aber dies waren Standardsystemprozesse. Suchen Sie nach postmasterProzessen!

Ich musste lediglich die Einstellungen für den gemeinsam genutzten Speicher ändern . In meinem Fall war es nicht nötig, an den Pfadeinstellungen herumzuspielen.



0

Wenn Sie eine dauerhafte Änderung Ihres $ PATH möchten, versuchen Sie Folgendes :

defaults write $HOME/.MacOSX/environment PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/local/bin"

Dies wird Ihre neu schreiben ~/.MacOSX/environment.plist.


0

Ich bin neu bei Rails, aber das Hinzufügen von Folgendes zu database.yml hat bei mir funktioniert:

host: localhost

port: 5432

Nicht sicher, warum Rails standardmäßig Domänensockets anstelle von TCP verwendet, während PostgreSQL standardmäßig keine Domänensockets einrichtet.


0

Mein PostgreSQL ist in / Library / PostgreSQL installiert, so dass / usr / var für mich nicht funktioniert hat.

Es scheint, dass Woz richtig ist, weil jedes Mal, wenn ich den Deckel meines MacBook Pro schließe, es abstürzt ... Folgendes hat nach dem Absturz für mich funktioniert:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.