wake-up-neo.net

Reparieren von Postgresql nach dem Upgrade auf OSX 10.7 Lion

Ich habe kürzlich ein Upgrade auf OSX 10.7 durchgeführt. Zu diesem Zeitpunkt kam es beim Versuch, eine Verbindung zum psql-Server herzustellen, zu einem vollständigen Absturz meiner Rails) -Installation

psql -U postgres

es funktioniert einwandfrei, aber wenn ich versuche, den Rails Server oder die Konsole mit demselben Benutzernamen und Passwort auszuführen, erhalte ich diese Fehlermeldung

...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!

196
Dave G

Es ist ein PATH-Problem. Mac OSX Lion enthält jetzt Postgresql im System. Wenn Sie einen which psql Eingeben, sehen Sie wahrscheinlich usr/bin/psql Anstelle von usr/local/bin/psql, Dem richtigen von HomeBrew. Wenn Sie brew doctor Ausführen, sollten Sie eine Meldung erhalten, die besagt, dass Sie usr/local/bin Zum Kopf Ihrer PATH-Umgebungsvariablen 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

beenden Sie als ersten Export für PATH entweder Ihre Shell-Sitzung oder geben Sie source ~/.bash_profile als Quelle für Ihre Datei ein. Jetzt sollte es wieder OK sein.

291
John Wang

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

Host: localhost

in die database.yml für meine Umgebung und alles war Sauce.

90
Dave G

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

Überprüfen Sie, wo das eigentliche Ziel ist:

Sudo find / -name .s.PGSQL.5432

Ich musste dieses Verzeichnis erstellen:

mkdir /var/pgsql_socket/

Verwenden Sie dann das Ergebnis der obigen Suche, um diesen Symlink zu erstellen:

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.

46
Ben

Wenn das Problem nach dem Ändern des Pfads weiterhin besteht (wie bei mir), probieren Sie auch Folgendes aus ...

gem pristine pg

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

29
Darren

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

psql -h localhost -U postgres
15
Rogerio

Ich hatte das gleiche Problem und hatte Probleme damit, dass John Wangs Lösung funktionierte. Wie Darren feststellte, gibt es ein Problem mit dem pg-Edelstein. Um es zum Laufen zu bringen, musste ich:

gem uninstall pg

Dann neu installieren.

Welches hat es funktioniert.

5
vladiim

Ist das für Homebrew? Ports scheint es in:

/opt/local/lib/postgresql91 

Stellen Sie also sicher, dass Sie den Export verwenden

PATH=/opt/local/lib/postgresql91/bin:$PATH

Mac-Ports Problem: https://trac.macports.org/ticket/30125

3
Antony Stubbs

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 (der/usr/local/bin sein kann, aber für mich/usr/local/pgsql/bin war) finden und das $ PATH voranstellen.

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

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

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

John Wangs Vorschlag an source ~/.bash_rc danach fügst du hinzu, dass dein bash_rc golden ist.

3
tjarratt

Ich bin mit den am häufigsten gestellten Antworten nicht zufrieden, da sie entweder betriebssystemspezifisch sind oder Postgres neu zuordnen, um TCP anstelle von Domain-Sockets zu verwenden, wie von @pilif ausgeführt. Ich habe eine andere gesehen Lösung, 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 alle anderen Kollisionen mit Anwendungsnamen wie dieser betroffen sein können.

Diese Seite Detailliert 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. verknüpfen Sie die Installation von Postgres durch das Gebräu

Dies ist mit der Einschränkung verbunden, dass das Postgres-Standardsystem das ist, was auch immer das Gebräu installiert hat. Sie müssen also entscheiden, ob dies für Sie richtig ist. Ich glaube nicht, dass ich Postgres 8.4 speziell über 9.x brauche, sondern YMMV

1
Eric Hu

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 können:

/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.

1
mike

In meinem Fall konnte der Server aufgrund falscher Einstellungen für den gemeinsamen Speicher nicht gestartet werden. Zuerst war ich verwirrt, weil mehrere Postgres-Prozesse liefen, aber das waren Standard-Systemprozesse. Suche nach postmaster Prozessen!

Alles, was ich tun musste, war Ändern der Einstellungen für den gemeinsamen Speicher . In meinem Fall war es nicht erforderlich, mit den Pfadeinstellungen herumzuspielen.

0
Ortwin Gentz

Mein PostgreSQL ist in/Library/PostgreSQL installiert, so dass das/usr/var-Zeug bei mir nicht funktioniert hat.

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

Sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
0
sethmuss

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

Host: localhost

port: 5432

Nicht sicher, warum Rails standardmäßig Domain-Sockets anstelle von TCP verwendet, während PostgreSQL standardmäßig keine Domain-Sockets einrichtet.

0
Ken Freeman

Möglicherweise müssen Sie den Host Ihrer Datenbank angeben.

0
user618589

Wenn Sie eine dauerhafte Änderung in Ihrem $ 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"

dadurch wird Ihr ~/.MacOSX/environment.plist umgeschrieben.

0
gylow