Naprawianie Postgresql po aktualizacji do OSX 10.7 Lion

196

Niedawno zaktualizowałem system do OSX 10.7, w którym to momencie moja instalacja szyn całkowicie się zepsuła podczas próby połączenia z serwerem psql. Kiedy robię to z wiersza poleceń za pomocą

psql -U postgres

działa całkowicie dobrze, ale kiedy próbuję uruchomić serwer lub konsolę Rails z tą samą nazwą użytkownika i hasłem, pojawia się ten błąd

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

Wszelkie pomysły, które mogłyby się wydarzyć, byłyby bardzo pomocne! Dzięki!

Dave G.
źródło
To również uderzyło kogoś w moim biurze; mieliśmy podobny problem z uzyskaniem niewłaściwego pliku binarnego, dodatkowy problem z próbą połączenia się z gniazdami domeny w innym katalogu z różnymi uprawnieniami i wygląda na to, że aktualizacja zjadła wszystkie dane w lokalnej bazie danych. Na szczęście było to tylko pudełko rozwojowe, więc nie jest to wielka sprawa, ale raczej nieznośna. :)
1
Uderzyłem go dzisiaj i przypomniałem sobie, jak wczoraj przeczytałem twoje pytanie. Dobrze widzieć @Jan Wang wyszedł i wyjaśnił to :)
Ryan Bigg

Odpowiedzi:

291

To kwestia ŚCIEŻKI. Mac OSX Lion zawiera teraz Postgresql w systemie. Jeśli to zrobisz which psql, prawdopodobnie zobaczysz, usr/bin/psqlzamiast usr/local/bin/psqlktórego jest poprawny HomeBrew. Jeśli uruchomisz brew doctor, powinieneś otrzymać komunikat, że musisz dodać usr/local/bindo nagłówka zmiennej env PATH.

Edycja pliku .bash_profile lub .profile lub dowolnej powłoki, której używasz, i dodawanie: export PATH=/usr/local/bin:$PATH

jako pierwszy eksport dla tej PATHsesji albo zakończ sesję powłoki, albo źródłowy plik source ~/.bash_profilei teraz powinno być OK.

John Wang
źródło
12
To naprawiło to. Możesz także edytować / etc / paths i upewnić się, że / usr / local / bin jest na górze
Greg
153
Zauważ też, że jeśli zainstalowałeś klejnot pg PRZED ustaleniem ścieżki, użyje niewłaściwego psql. Jeśli tak, odinstaluj klejnot pg, a następnie zainstaluj go ponownie (odinstaluj klejnot pg && gem zainstaluj pg).
Troy
4
Czy to dla homebrew? Wydaje się, że porty umieszczają go w: / opt / local / lib / postgresql91 Więc upewnij się, że używasz PATH eksportu = / opt / local / lib / postgresql91 / bin: $ PATH
Antony Stubbs
1
Moja ścieżka raportowała poprawnie, ale rozwiązanie Troya polegające na odinstalowaniu klejnotu pg, a następnie umożliwieniu ponownej instalacji bundlera, załatwiło sprawę.
Tom Harrison,
2
Tylko dla wyjaśnienia - wygląda na to, że najlepiej jest ustawić poprawnie ścieżkę, a następnie odinstaluj / ponownie zainstaluj pg gem
Jamie Cook
90

Dla tych, którzy są zainteresowani, poskładałem rozwiązanie. Wszystko, czego potrzebowałem, to dodać

host: localhost

do database.yml dla mojego środowiska i wszystko było sos.

Dave G.
źródło
9
bądź ostrożny z tym: To ustawienie zmienia dostęp z gniazda domeny na połączenie TCP. Chociaż prawdopodobnie działa, możesz stracić trochę wydajności i użytecznych portów na komputerze, co może stanowić problem w zależności od konfiguracji. Rozwiązanie dostarczone przez Johna jest poprawne.
pilif
3
'gem uninstall pg' (wybierz wszystkie wersje), a następnie 'bundle' ponownie, aby zainstalować wersję pg z twojego Gemfile działała dla mnie.
tmadsen,
Dzięki Dave'owi G, to też zadziałało dla mnie. Zainstalowałem aktualizację 10.7.3 i rake db: migracja narzekała. To naprawiło to.
Sathish,
To też działało dla mnie. Jednak pozostawiłem hasło i nazwę użytkownika puste.
Benjamin
Wyobrażam sobie, że to zadziała, ponieważ wymusza połączenie TCP / IP.
duma,
46

Miałem ten problem z Mountain Lion, ale jedyną rzeczą, która działała dla mnie, była ta poprawka :

Sprawdź, gdzie jest rzeczywisty cel:

sudo find / -name .s.PGSQL.5432

Musiałem utworzyć ten katalog:

mkdir /var/pgsql_socket/

Następnie, korzystając z wyniku z powyższego znaleziska, utwórz to dowiązanie symboliczne:

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

Podejrzewam, że dla większości ludzi na Mountain Lion możesz po prostu stworzyć katalog i wykonać dowiązanie symboliczne i nie marnować czasu na szukanie, chyba że dowiązanie symboliczne nie działa.

PS - mój PostgreSQL został zainstalowany za pośrednictwem oficjalnego instalatora.

Ben
źródło
Mam wrażenie, że to może być dla mnie, ale nie mogę sprawić, by działało. Dostaję to: ln: / var / pgsql_socket /: Brak takiego pliku lub katalogu
Emmanuel
Przepraszam, zapomniałem, że też na to wpadłem. Dodano dodatkowy krok, aby odpowiedzieć.
Ben
Na zdrowie, Ben. Mile widziane.
Matt
29

Jeśli problem nadal występuje w przeszłości, zmieniając ścieżkę (tak jak dla mnie), spróbuj również tego ...

gem pristine pg

Wygląda na to, że problem (częściowo) leży w samym klejnocie pg. Podczas kompilacji określa, gdzie powinno być gniazdo domeny. Jeśli zmienisz lokalizację gniazda domeny po tym, że wydaje się, że nie działa, dopóki nie odbudujesz klejnotu.

Darren
źródło
To działało dla mnie, nawet po tym, jak naprawiłem PATH i ponownie zainstalowałem klejnot pg bez nieskazitelności.
Elliot Winkler,
Dzięki za tę wskazówkę, Darren
bhinks
15

Dla tych, którzy zainstalowali bezpośrednio z oficjalnego instalatora, dodanie hosta do polecenia działa bez zmian ścieżki:

psql -h localhost -U postgres
Rogerio
źródło
5

Miałem ten sam problem i miałem problemy z działaniem rozwiązania Johna Wanga. Jak zauważył Darren, istnieje problem z klejnotem pg. Aby to działało, musiałem:

gem uninstall pg

Następnie zainstaluj ponownie.

Co sprawiło, że działało.

Vladiim
źródło
Musiałem uruchomić to dwa razy ... dziwnie. Zrobiłem odinstalować pg, a następnie zainstalować pakiet i nie powiodło się. Potem właśnie zainstalowałem gem pg i zadziałało. Dzięki!
Dustin
3

Wpadłem również na to, ale sam zainstalowałem postgres (nie z homebrew). W takim przypadku musisz znaleźć starą ścieżkę do psql (która może być / usr / local / bin, ale dla mnie był / usr / local / pgsql / bin) i wstawić ją do swojej zmiennej $ PATH.

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

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

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

Sugestia Johna Wanga, by source ~/.bash_rcpotem dodać to do bash_rc, jest złota.

tjarratt
źródło
3

Czy to dla homebrew? Wydaje się, że porty umieszczają to w:

/opt/local/lib/postgresql91 

Więc upewnij się, że używasz eksportu

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

Problem z portami Mac: https://trac.macports.org/ticket/30125

Antony Stubbs
źródło
1

Nie jestem zadowolony z najbardziej uprzywilejowanych odpowiedzi, ponieważ są one albo specyficzne dla użytkownika systemu operacyjnego, albo zmieniają Postgres, aby używał TCP zamiast gniazd domeny, jak wskazał @pilif. Widziałem inne rozwiązanie, które polega na zmianie kolejności domyślnych ścieżek na poziomie systemu, aby sprawdzić ścieżkę Brew'a przed podstawową ścieżką systemową, ale wydaje się to niebezpieczne, ponieważ może mieć wpływ na wszystkie inne kolizje nazw aplikacji, takie jak ta.

Ta strona opisuje rozwiązanie, które znalazł mój współpracownik. Wszystko sprowadza się do wykonania pojedynczego skryptu powłoki

  1. wykonaj kopię zapasową plików Postgres 8.4 w osobnym katalogu
  2. symlink instalacji naparu Postgres na miejscu

Jest to związane z zastrzeżeniem, że domyślnym systemem Postgres jest każdy zainstalowany napar, więc musisz osądzić, czy jest to odpowiednie dla Ciebie. Nie widzę potrzeby korzystania z Postgres 8.4 powyżej 9.x, ale YMMV

Eric Hu
źródło
1

Innym możliwym rozwiązaniem, które mi pomogło, jest zresetowanie pliku postmastera poprzez jego usunięcie. Po prostu uruchom:

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

Warto sprawdzić dziennik pod kątem błędów, które można znaleźć tutaj:

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

Komunikat o błędzie, który miałem:

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

Potem wszystko działało świetnie.

mikrofon
źródło
Miałem problem tylko z wiersza poleceń. Usunięcie pliku /usr/local/var/postgres/postmaster.pid rozwiązało mój problem.
Michael A.
0

W moim przypadku serwer nie uruchomił się z powodu złych ustawień pamięci współdzielonej. Na początku byłem zdezorientowany, ponieważ działało kilka procesów postgres, ale były to standardowe procesy systemowe. Poszukaj postmasterprocesów!

Wszystko, co musiałem zrobić, to zmienić ustawienia pamięci współdzielonej . W moim przypadku nie trzeba było bawić się ustawieniami ścieżki.

Ortwin Gentz
źródło
0

Może być konieczne określenie hosta bazy danych.

użytkownik618589
źródło
0

Jeśli podoba Ci się trwała zmiana w $ PATH, spróbuj tego:

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

spowoduje to przepisanie twojego ~/.MacOSX/environment.plist.

Gylow
źródło
0

Jestem nowy w Railsach, ale dodanie do pliku database.yml było następujące :

host: localhost

port: 5432

Nie jestem pewien, dlaczego Railsy domyślnie używają gniazd domen zamiast TCP, podczas gdy PostgreSQL domyślnie nie konfiguruje gniazd domen.

Ken Freeman
źródło
0

Mój PostgreSQL jest zainstalowany w / Library / PostgreSQL, więc / usr / var nie działało dla mnie.

Wygląda na to, że Woz ma rację, ponieważ za każdym razem, gdy zamykam pokrywę mojego MacBooka Pro, ulega awarii ... Oto, co zadziałało dla mnie po awarii:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
sethmuss
źródło