Udało mi się zepsuć moje lokalne środowisko programistyczne.
Wszystkie moje lokalne aplikacje Railsowe wyświetlają teraz błąd:
PGError
could not connect to server: Permission denied
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
Nie mam pojęcia, co to spowodowało.
Szukając rozwiązania, zaktualizowałem wszystkie dołączone klejnoty, zaktualizowałem klejnoty systemowe, zaktualizowałem MacPorts. Brak przyjemności.
Inni zgłaszali ten problem podczas aktualizacji z OSX Leopard do Lion, z powodu niejasności co do wersji Postgres (tj. Wersji OSX lub wersji MacPorts). Prowadzę Lion'a od kilku miesięcy, więc wydaje się dziwne, że powinno to nastąpić teraz.
Nie chcę zbytnio się bawić bez uprzedniego zrozumienia, na czym polega problem. Jak mogę to metodycznie debugować?
Jak mogę określić, ile wersji PostgreSQL jest w moim systemie, do której z nich uzyskuje się dostęp i gdzie się znajduje? Jak to naprawić, jeśli używany jest niewłaściwy PostgreSQL?
Przepraszam za pytania noobów. Wciąż się uczę, jak to działa! Dzięki za wskazówki.
EDYTOWAĆ
Niektóre aktualizacje oparte na sugestiach i komentarzach poniżej.
Próbowałem uruchomić, pg_lsclusters
co zwróciło command not found
błąd.
Następnie spróbowałem zlokalizować mój plik pg_hba.conf i znalazłem te trzy przykładowe pliki:
/opt/local/share/postgresql84/pg_hba.conf.sample
/opt/local/var/macports/software/postgresql84/8.4.7_0/opt/local/share/postgresql84/pg_hba.conf.sample
/usr/share/postgresql/pg_hba.conf.sample
Więc zakładam, że są zainstalowane 3 wersje PSQL? Macports, OSX default i ???.
Następnie wyszukałem skrypt startowy launchctl, ps -ef | grep postgres
który zwrócił
0 56 1 0 11:41AM ?? 0:00.02 /opt/local/bin/daemondo --label=postgresql84-server --start-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper start ; --stop-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper stop ; --restart-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper restart ; --pid=none
500 372 1 0 11:42AM ?? 0:00.17 /opt/local/lib/postgresql84/bin/postgres -D /opt/local/var/db/postgresql84/defaultdb
500 766 372 0 11:43AM ?? 0:00.37 postgres: writer process
500 767 372 0 11:43AM ?? 0:00.24 postgres: wal writer process
500 768 372 0 11:43AM ?? 0:00.16 postgres: autovacuum launcher process
500 769 372 0 11:43AM ?? 0:00.08 postgres: stats collector process
501 4497 1016 0 12:36PM ttys000 0:00.00 grep postgres
Zamieściłem zawartość postgresql84-server.wrapper pod adresem http://pastebin.com/Gj5TpP62 .
Próbowałem uruchomić, port load postgresql184-server
ale otrzymałem błąd Error: Port postgresql184-server not found
.
Nadal nie wiem, jak to naprawić i doceniam wszelkie wskazówki „dla głupków”.
Dzięki!
EDYCJA2
Ten problem zaczął się po tym, jak miałem problemy z daemondo. Moje lokalne aplikacje Railsów ulegały awarii z błędem aplikacji typu „daemondo gem nie można znaleźć”. Następnie przeszedłem przez serię aktualizacji pakietów, aktualizacji klejnotów, aktualizacji portów i aktualizacji parzenia, aby spróbować znaleźć problem.
Czy ten błąd może być problemem z daemondo?
źródło
pg_lsclusters
i swójpg_hba.conf
plik.Odpowiedzi:
To naprawdę wygląda na błąd uprawnień do pliku. Gniazda domeny uniksowej są plikami i mają uprawnienia użytkownika, tak jak każde inne. Wygląda na to, że użytkownik OSX próbujący uzyskać dostęp do bazy danych nie ma uprawnień dostępu do pliku gniazda. Aby to potwierdzić, wykonałem kilka testów na Ubuntu i psql, aby spróbować wygenerować ten sam błąd (zamieszczony poniżej).
Musisz sprawdzić uprawnienia do pliku gniazda i jego katalogów
/var
oraz/var/pgsql_socket
. Twoja aplikacja Railsowa (użytkownik OSX) musi mieć uprawnienia do wykonywania (x) w tych katalogach (najlepiej nadaj uprawnienia każdemu), a gniazdo powinno mieć pełne uprawnienia (wrx). Możesz użyć,ls -lAd <file>
aby to sprawdzić, a jeśli którykolwiek z nich jest dowiązaniem symbolicznym, musisz sprawdzić plik lub katalog, na który wskazuje łącze.Możesz zmienić uprawnienia do katalogu dla siebie, ale gniazdo jest konfigurowane przez postgres w
postgresql.conf
. Można go znaleźć w tym samym katalogu, copg_hba.conf
(Musisz dowiedzieć się, który z nich). Po ustawieniu uprawnień będziesz musiał ponownie uruchomić postgresql.EDYTOWAĆ:
Dokonałem szybkiego wyszukiwania w Google, do którego możesz zajrzeć, aby sprawdzić, czy jest relavent. Może to spowodować
find
niepowodzenie każdej próby pliku konfiguracyjnego.http://www.postgresqlformac.com/server/howto_edit_postgresql_confi.html
Komunikaty o błędach:
Nie znaleziono użytkownika w pg_hba.conf
Nieudane uwierzytelnianie hasła użytkownika:
Brak pliku gniazda unix:
Gniazdo uniksowe istnieje, ale serwer go nie słucha.
Złe uprawnienia do pliku gniazda unix :
źródło
PS
zwraca procesy postgres, więc jest uruchomiony. Zmieszany!Moje przeczucie jest takie, że jest to (znowu) sprawa Mac / OSX: front-end i back-end przyjmują inną lokalizację dla gniazda domeny unix (które działa jako punkt spotkania ).
Lista kontrolna:
ps aux | grep postgres | grep -v grep
powinien załatwić sprawęfind / -name .s.PGSQL.5432 -ls
(gniazdo znajdowało się w / tmp; możesz zacząć tam szukać)Jeśli postgres jest uruchomiony, a gniazdo faktycznie istnieje, możesz użyć:
psql -h /the/directory/where/the/socket/was/found mydbname
(który próbuje połączyć się z gniazdem domeny unix)
; powinieneś teraz otrzymać znak zachęty psql: spróbuj,
\d
a następnie\q
zakończ. Możesz też spróbować:psql -h localhost mydbname
.(który próbuje połączyć się z localhost (127.0.0.1)
Jeśli te próby zakończą się niepowodzeniem z powodu niewystarczającej autoryzacji, możesz zmienić pg_hba.conf (i SIGHUP lub zrestartować). W tym przypadku: sprawdź także dzienniki.
Podobne pytanie: Nie można uruchomić Postgres
Uwaga: Jeśli możesz dostać się do zachęty psql, szybkim rozwiązaniem tego problemu jest zmiana
config/database.yml
, dodaj:host: localhost
lub możesz spróbować dodać:
host: /the/directory/where/the/socket/was/found
W moim przypadku,
host: /tmp
źródło
Spróbuj odinstalować gem pg (
gem uninstall pg
), a następnie ponownie zainstalować - jeśli używasz Bundler, następniebundle install
, elsegem install pg
. Upewnij się również, że ścieżka wybiera właściwą wersję: Lion ma wersję posgresql (poprzednie wersje nie miały) i może znajdować się w ścieżce przed lokalnie zainstalowaną wersją (np. MacPorts, homebrew).W moim przypadku: homebrew zainstalował postgresql, zaktualizował postgresql, rails itp., A następnie otrzymałem ten błąd. Odinstalowanie i ponowne zainstalowanie pg gem zrobiło to za mnie.
źródło
Lokalizacja pliku gniazda jest umieszczana w kleju w czasie kompilacji. Dlatego musisz odbudować swój pg gem.
Powinno to rozwiązać ten konkretny problem.
źródło
Jeśli otrzymujesz podobny błąd:
To może załatwić sprawę (zrobiło to dla mnie):
Podany katalog powinien być inny, jeśli nie używasz OSX / Brew.
Uwaga: nie jest to dokładny komunikat o błędzie widoczny powyżej, ale ten wątek jest pierwszym wynikiem tego komunikatu o błędzie.
źródło
rm -fr /usr/local/var/postgres
przed starteminitb
rm -rf /usr/local/var/postgres
poteminitdb /usr/local/var/postgres -E utf8
. Ale upewnij się, że postgres nie jest uruchomiony, gdy to zrobisz, w przeciwnym razie katalog zostanie odtworzony prawie natychmiast.Rozwiązaniem tego błędu było dla mnie usunięcie pliku o nazwie postmaster.pid z katalogu postgres. zobacz moje pytanie / odpowiedź, korzystając z poniższego linku, aby uzyskać instrukcje krok po kroku. mój problem nie był związany z uprawnieniami do plików:
psql: nie można połączyć się z serwerem: nie ma takiego pliku lub katalogu (Mac OS X)
ludzie, którzy odpowiedzieli na to pytanie, zrezygnowali z gry, dzięki za to! Głosowałem za wszystkim, co mogłem
źródło
Oto jak rozwiązałem ten komunikat o błędzie, częściowo w oparciu o odpowiedź Wildplassera.
Więc jest moje gniazdo lub cokolwiek innego, ale klient szuka go na:
Więc po prostu stwórz symboliczne dowiązanie do
/tmp/.s.PGSQL.5432
:Mam nadzieję, że to pomoże każdemu. Wydaje się to niewłaściwe, ale hej, działa!
źródło
sudo mkdir /var/run/postgresql
folderu (w moim przypadku id nie istniał i nie został utworzony przez instalator dla pg 9.3.X).Zacząłem to rozumieć po uaktualnieniu do nowego postgresu - nie zdawałem sobie sprawy, że przechowuję pliki danych.
Najpierw próbowałem uruchomić serwer postgres:
czyli jak widziałem ten błąd
Więc znalazłem tę odpowiedź na SO - związaną z błędem niezgodności: /server/342626/how-do-i-upgrade-postgresl-database-incompatibility-error
To właśnie to naprawiło
źródło
Potwierdzam tylko, że miałem podobny problem z PSQL i Django,
Wyglądało na to, że mój serwer psql nie został poprawnie zamknięty, a plik postmaster.pid był nadal obecny (powinien zostać automatycznie usunięty po prawidłowym zamknięciu) w moim folderze postgres.
Usunięto to i wszystko dobrze
źródło
psql: could not connect to server: No such file or directory.
Usuwaniepostmaster.pid
z/usr/local/var/postgres
sprawiło, że wszystko znów działało.postmaster.pid
Otrzymałem ten sam błąd (okazuje się, że był to błąd z . Oto jak uruchomiłem postgres i ponownie go uruchomiłem ( uznanie dla Ricardo Burillo za poprawkę ):źródło
pg_resetxlog
istnieje zwrócony plik „lock file” postmaster.pid.Miałem podobny problem podczas próby użycia postgresql z railsami. Zaktualizowanie mojego Gemfile do nowej wersji gem pg rozwiązało ten problem. (działa gem pg w wersji 0.16.0). W Gemfile użyj:
następnie uruchom poniższe, aby zaktualizować klejnot
źródło
Czytałem wiele tematów na temat tego błędu i rozwiązaniem dla mnie było po prostu ponowne uruchomienie postgresów za pomocą:
O czym tutaj nie wspomniano.
źródło
Przez chwilę szukam rozwiązania. Więc ten również rozwiązał problem dla mnie (reinit db):
Używam OS X 10.11.3 z naparem.
źródło
Zdarzyło mi się to dzisiaj po rozładowaniu baterii mojego Macbooka. Myślę, że może to być spowodowane nieprawidłowym wyłączeniem. Wszystko, co musisz zrobić w przypadkach takich jak mój, to usunąć postmaster.pid
Przejdź do folderu
Sprawdź, czy obecny jest postmaster.pid
Usuń postmaster.pid
źródło
W moim przypadku żadne z poprzednich rozwiązań nie było dobre. Zamiast używać gniazda, możesz użyć numeru TCP
host
+port
w pliku konfiguracyjnym Railsów. Więc wdatabase.yml
pliku po prostu dodaj dwie linie, jak tutaj:To rozwiązało mój problem :)
Zanim użyłem tej poprawki:
Ale po każdym ponownym uruchomieniu
/tmp/.s.PGSQL.5432
został usunięty i musiałem powtórzyć te polecenia. Rozwiązanie działa, ale jest okropne, więc lepiej po prostu zmodyfikuj plik konfiguracyjny bazy danych Rails :)źródło
Otrzymałem ten błąd podczas konfigurowania Posgtres z Django, używam Back Track i jest dostarczany z zainstalowanym Postgresem. Zakładam, że problemem są ustawienia. Naprawiłem to, usuwając go całkowicie, a następnie ponownie instalując w ten sposób.
Teraz biegnij:
aby usunąć wszystko, co PostgreSQL z twojego systemu. Samo wyczyszczenie pakietu postgres nie wystarczy, ponieważ jest to po prostu pusty meta-pakiet.
Po usunięciu wszystkich pakietów PostgreSQL uruchom:
Teraz powinieneś umieć:
źródło
MacOSX tutaj. Miałem ten sam problem po uaktualnieniu mojej instalacji postresql z wersji sprzed 9.1 do 9.1.2 przy użyciu homebrew. (Nawiasem mówiąc, pamiętaj, aby zrzucić bazy danych przed aktualizacją za pomocą pg_dump, bazy danych sprzed wersji 9.1 są niekompatybilne.) Ten sam problem, te same komunikaty o błędach.
Odinstalowanie pg gem załatwiło mi sprawę. Właściwie musiałem trochę potańczyć, żeby odkryć problem. Najpierw wykonałem globalną deinstalację klejnotów, usuwając wszystkie stare klejnoty (było ich kilka). Następnie usunąłem pg z mojego pliku Gemfile, ponownie zawiązałem, przywróciłem odniesienie pg i ponownie się zwróciłem.
Potem działało jak urok.
źródło
Witaj świecie :)
Najlepszym, ale dziwnym dla mnie sposobem było robienie kolejnych rzeczy.
1) Pobierz postgres93.app lub inną wersję. Dodaj tę aplikację do folderu / Applications /.
2) Dodaj wiersz (polecenie) do pliku
To jest ŚCIEŻKA do.bash_profile
(który znajduje się w moim katalogu domowym):psql
zPostgres93.app
. Wiersz (polecenie) jest uruchamiany za każdym razem, gdy uruchamiana jest konsola.3) Uruchom
Postgres93.app
z/Applications/
folderu. Uruchamia lokalny serwer (port to „5432”, a host to „localhost”).4) Po tych wszystkich manipulacjach ucieszyłem się, mogąc uruchomić
$ createuser -SRDP user_name
i innych poleceń i zobaczyć, że zadziałało!Postgres93.app
można uruchomić przy każdym uruchomieniu systemu.5) Również jeśli chcesz zobaczyć swoje bazy danych graficznie, powinieneś zainstalować
PG Commander.app
. To dobry sposób, aby zobaczyć swoją bazę danych postgres jako ładne tabele danychOczywiście jest to pomocne tylko w przypadku serwera lokalnego. Będzie mi miło, jeśli ta instrukcja pomoże innym, którzy stanęli przed tym problemem.
źródło
Miałem ten problem nękający mnie i po dalszych badaniach (uruchomionych
rake db:setup
) zauważyłem, że rails próbowały połączyć się z wcześniej używaną instancją postgres - taką, która była przechowywana w zmiennych env jako DATABASE_URL.Poprawka:
unset DATABASE_URL
źródło: https://stackoverflow.com/a/17420624/2577622
źródło
Wypróbowałem większość rozwiązań tego problemu, ale żadne nie zadziałało.
Uruchomiłem,
lsof -P | grep ':5432' | awk '{print $2}'
który pokazał PID uruchomionego procesu. Jednak nie mogłem tego zabićkill -9 <pid>
.Kiedy uruchomiłem,
pkill postgresql
proces w końcu się zatrzymał. Mam nadzieję że to pomoże.źródło
W systemie OS X z Homebrew:
źródło