psql: nie można połączyć się z serwerem: brak takiego pliku lub katalogu (Mac OS X)

247

Po ponownym uruchomieniu komputera Mac otrzymałem przerażający błąd Postgres:

psql: could not connect to server: No such file or directory
 Is the server running locally and accepting
 connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Powodem tego jest to, że mój Macbook całkowicie zamarzł z powodu niezwiązanego problemu i musiałem przeprowadzić twardy restart przy użyciu przycisku zasilania. Po ponownym uruchomieniu nie mogłem uruchomić Postgres z powodu tego błędu.

Ognisty smok
źródło
1
W ramach kontroli poczytalności upewnij się, że na Twoim komputerze działa PG
Jbur43,
1
Kiedy zostawiasz odpowiedź, spróbuj wyjaśnić, DLACZEGO to się dzieje, lub jak działa system Postgres, abyśmy wszyscy nie tylko próbowali losowych rzeczy.
Nick Res
6
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 pracował dla mnie
Derk Jan Speelman
brew ponownie zainstalować postgresql to rozwiązało mój problem
Ajay Kumar

Odpowiedzi:

422

OSTRZEŻENIE: Jeśli usuniesz postmaster.pid bez upewnienia się, że naprawdę nie ma postgresuruchomionych procesów, może to spowodować trwałe uszkodzenie bazy danych . (PostgreSQL powinien usunąć go automatycznie, jeśli postmaster wyszedł.).

ROZWIĄZANIE: To rozwiązało problem - usunąłem ten plik, a potem wszystko działało!

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

-

i oto jak zorientowałem się, dlaczego trzeba to usunąć.

  1. Użyłem następującego polecenia, aby sprawdzić, czy są uruchomione jakieś procesy PG. dla mnie nie było, nie mogłem nawet uruchomić serwera PG:

    ps auxw | grep post
  2. Szukałem pliku .s.PGSQL.5432, który był w powyższym komunikacie o błędzie. użyłem następującego polecenia:

    sudo find / -name .s.PGSQL.5432 -ls

    to nic nie pokazało po przeszukaniu całego komputera, więc plik nie istniał, ale oczywiście psql„chciałem, żeby” lub „myślałem, że tam jest”.

  3. Przejrzałem dzienniki serwera i zobaczyłem następujący błąd:

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

    na końcu dziennika serwera widzę następujący błąd:

    FATAL:  pre-existing shared memory block (key 5432001, ID 65538) is still in use
    HINT:  If you're sure there are no old server processes still running, remove the shared memory block or just delete the file "postmaster.pid".
  4. Postępując zgodnie ze wskazówkami zawartymi w komunikacie o błędzie, usunąłem plik postmaster.pid w tym samym katalogu, co server.log. To rozwiązało problem i mogłem ponownie uruchomić.

Wygląda więc na to, że mój komputer MacBook zawiesił się i został ponownie uruchomiony, co spowodowało, że Postgres pomyślał, że jego procesy nadal działają nawet po ponownym uruchomieniu. Usunięcie tego pliku rozwiązane. Mam nadzieję, że to pomaga innym! Wiele osób ma podobne problemy, ale większość odpowiedzi dotyczyła uprawnień do plików, podczas gdy w moim przypadku było inaczej.

Ognisty smok
źródło
9
mam nadzieję, że ta odpowiedź pomoże komuś innemu wyjść i dziękuję osobie, która ją głosowała. pomimo moderatora, który oznaczył to pytanie jako duplikat, jest ono unikalne i przydatne. dzięki przepełnienie stosu dla niesamowitej strony i ekspertów tutaj za udostępnienie!
FireDragon,
2
Po prostu FWIW, usunięcie postmaster.pid jest niebezpieczne, musisz być naprawdę pewien, że nie ma postgresuruchomionych procesów, zanim to zrobisz.
Craig Ringer
21
Świetna odpowiedź. Dziękujemy za opublikowanie całego procesu, a nie tylko potencjalnie destrukcyjne polecenie!
dojosto
3
Zgoda. Odpowiedź na temat postmaster.pid jest dobra, ale każdy etap ustalania, czy / gdzie działa postgres, jest nieoceniony . Dziękuję Ci!
Clinton
11
Mój postgres logował się na macos o /usr/local/var/log/postgres.log.
ryantuck
172

Żadne z powyższych nie działało dla mnie. Musiałem ponownie zainstalować Postgres w następujący sposób:

  • Odinstaluj postgresql z brew: brew uninstall postgresql
  • brew doctor (napraw cokolwiek tu jest)
  • brew cleanup
  • Usuń wszystkie foldery Postgres:

    • rm -r /usr/local/var/postgres
    • rm -r /Users/<username>/Library/Application\ Support/Postgres
  • Ponownie zainstaluj postgresql z zaparzeniem: brew install postgresql

  • Uruchom serwer: brew services start postgresql
  • Powinieneś teraz utworzyć swoje bazy danych ... ( createdb)
ypicard
źródło
4
Pracował dla mnie, ale nie musiałem usuwać faktycznej bazy danych i nie miałem folderu w obsłudze aplikacji. Myślę, że chodziło o to, że niektóre elementy parzenia miały zerwane dowiązania symboliczne podczas instalacji postgresu. Naprawienie ich i ponowne zainstalowanie postgres rozwiązało problem. Dzięki!
Kulbi
2
Ani ta, ani najwyższa odpowiedź nie działała dla mnie, dopóki nie pobiegłembrew postgresql-upgrade-database
ErikAGriffin
To działało dla mnie, tyle że nie musiałem usuwać starych danych.
Amal Antony
Aby potwierdzić: powoduje to usunięcie wszystkich baz danych, prawda? Udało mi się tylko z brew reinstall postgrespotwierdzeniem, że najnowszy numer głównej wersji Homebrew Postgres był taki sam, jak mój obecny (zepsuty).
Jacob Ford
85

Jeśli korzystasz z systemu macOS i zainstalowałeś postgres przez homebrew, spróbuj uruchomić go ponownie za pomocą

brew services restart postgresql

Jeśli korzystasz z systemu Ubuntu, możesz go ponownie uruchomić za pomocą jednego z tych poleceń

sudo service postgresql restart

sudo /etc/init.d/postgresql restart
Jagdish Barabari
źródło
34

Być może jest to niepowiązane, ale podobny błąd pojawia się podczas aktualizacji postgresdo wersji głównej za pomocą brew; za pomocą brew info postgresqlodkryłem to, co pomogło:

To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
Szalony Barney
źródło
4
Pomogło
1
Pracowałem również dla mnie
emptywalls
15

Oto moja droga:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm /usr/local/var/postgres/postmaster.pid
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
smartworld-dm
źródło
1
Działa to dla mnie, gdy nie zostało wykonane żadne inne zatrzymywanie i uruchamianie / restartowanie / ponowna instalacja Postgres przy użyciu homebrew. Dzięki @ smartworld-dm
Bradley,
1
To jest dusza, do której zawsze wracam. Mogę dodać alias, który po uruchomieniu fix-my-postgresqlwykona to :)
Tomas K
1
Wiesz, dlaczego muszę to robić przy każdym ponownym uruchomieniu komputera?
stephano
11

jeśli twój postmaster.pidzniknął i nie możesz zrestartować się ani nic, zrób to:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

jak wyjaśniono tutaj na początku

Antoine
źródło
8

Witaj świecie :)
Najlepszym, ale dziwnym sposobem dla mnie było robienie kolejnych rzeczy.

1) Pobierz postgres93.app lub inną wersję. Dodaj tę aplikację do folderu / Applications /.

2) Dodaj wiersz (polecenie) do pliku.bash_profile (który znajduje się w moim katalogu domowym):

export PATH = / Aplikacje / Postgres93.app / Contents / MacOS / bin /: $ PATH
To droga do psqlz Postgres93.app. Wiersz (polecenie) jest uruchamiany przy każdym uruchomieniu konsoli.

3) Uruchom Postgres93.appz /Applications/folderu. Uruchamia serwer lokalny (port to „5432”, a host to „localhost”).

4) Po tych wszystkich manipulacjach z przyjemnością uruchomiłem $ createuser -SRDP user_nameinne polecenia i zobaczyłem, że to działa! Postgres93.appmoże być uruchamiany 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 danych

Oczywiście jest to przydatne tylko dla lokalnego serwera. Będę zadowolony, jeśli te instrukcje pomogą innym, którzy borykają się z tym problemem.

crazzyaka
źródło
1
Kluczem tutaj jest dodanie Postgres do swojej ścieżki (krok 2). To mi pomogło. Jeśli zainstalowałeś Postgres za pomocą Homebrew, możesz dodać go do swojej ścieżki, dodając następujący wiersz do .bash_profile: export PATH='/usr/local/Cellar/postgresql/9.4.1/bin/':$PATH- Pamiętaj, że twój numer wersji może być inny.
Tina
7

Ten problem ma wiele źródeł, a zatem wiele odpowiedzi. Doświadczyłem każdego z nich.

1) Jeśli masz awarię, usunięcie pliku /usr/local/var/postgres/postmaster.pid jest prawdopodobnie wymagane, ponieważ postgres mógł nie poradzić sobie z nim poprawnie. Ale upewnij się, że żaden proces nie jest uruchomiony.

2) Craig Ringer zauważył w innych postach, że pakietowanie postgreSQL przez Apple prowadzi do problemów z instalacją klejnotów pg Ustawienie zmiennej środowiskowej PATH jest rozwiązaniem.

3) Innym rozwiązaniem jest odinstalowanie i ponowne zainstalowanie klejnotu. Konieczna może być również aktualizacja naparu.

Jeśli natkniesz się na ten post, jeśli możesz wskazać jedno ze źródeł, zaoszczędzisz czas ...

Jerome
źródło
3
Cieszę się, że to opublikowałem. Kolejna awaria i odpowiedź można dość szybko odzyskać ...
Jerome
6

Dla mnie rozwiązaniem było po prostu ponowne uruchomienie komputera. Najpierw próbowałem uruchomić ponownie z usługami Brew, a kiedy to nie zadziałało, ponowne uruchomienie wydawało się kolejną najlepszą opcją do wypróbowania, zanim przyjrzę się bardziej zaangażowanym rozwiązaniom. Wszystko działało tak, jak powinno.

Matt Lemieux
źródło
5

Miałem tutaj podobny problem. Rozwiązałem ten problem jak poniżej.

W rzeczywistości proces postgres jest martwy, aby zobaczyć status postgres uruchom następujące polecenie

sudo /etc/init.d/postgres status

Mówi, że proces jest martwy - wystarczy rozpocząć proces

sudo /etc/init.d/postgres start
Jagdish Barabari
źródło
Dziękuję za odpowiedź, twoja odpowiedź pomogła mi rozwiązać ten sam problem z pewnymi modyfikacjami: sudo /etc/init.d/postgresql start
Pravitha V
4

Stało się tak po tym, jak mój komputer Mac (High Sierra) zamarł i musiałem ręcznie go ponownie uruchomić (naciśnij i przytrzymaj przycisk zasilania). Wszystko, co musiałem zrobić, aby to naprawić, to czysty restart.

skwidbreth
źródło
3

Mój problem polegał na tym, że używałem maski przeciwgazowej (menedżer plików hosts na Macu) i nie miałem wpisu localhost w pliku hostów, którego używałem.

Dodałem:

127.0.0.1 localhost

I to rozwiązało mój problem.

jawns317
źródło
3

Nie jestem do końca pewien, dlaczego, ale moja instalacja Postgres trochę się wkręciła i niektóre pliki zostały usunięte, co powoduje wyświetlenie błędu OP.

Pomimo faktu, że jestem w stanie uruchamiać polecenia takie jak brew service retart postgresi widzieć właściwe komunikaty, błąd ten nadal występował.

Przejrzałem dokumentację postgres i okazało się, że mój plik /usr/local/var/postgresjest całkowicie pusty. Więc uruchomiłem następujące:

initdb /usr/local/var/postgres

Wygląda na to, że niektóre konfiguracje miały miejsce z tym poleceniem.

Potem poprosił mnie o uruchomienie tego:

postgres -D /usr/local/var/postgres

I to powiedziało mi, że plik postmaster.pid już istnieje.

Musiałem tylko wiedzieć, czy brew będzie mógł pobrać konfiguracje, które właśnie uruchomiłem, więc przetestowałem to.

ls /usr/local/var/postgres

To pokazało mi plik postmaster.pid. Potem zrobiłem brew services stop postgresql, a plik postmaster.pid zniknął. Potem zrobiłem brew services start postgresqli plik VIOLA pojawił się ponownie.

Potem poszedłem naprzód i uruchomiłem aplikację, która faktycznie znalazła serwer, jednak moje bazy danych wydają się zniknąć.

Chociaż wiem, że wcale ich nie ma - nowa inicjalizacja, którą zrobiłem, mogła stworzyć nową strefę danych, a stara nie jest wskazywana. Musiałbym spojrzeć na to, gdzie to jest i skierować to z powrotem, lub po prostu ponownie utworzyć bazy danych.

Mam nadzieję że to pomoże! Bardzo mi pomogło czytanie dokumentów postgres. Nienawidzę czytać odpowiedzi typu „Wklej to w to działa!” ponieważ nie wiem, co się do cholery dzieje i dlaczego.

Nick Res
źródło
2

Przyczyn tego błędu jest wiele, dlatego najpierw zlokalizuj plik dziennika i sprawdź, czy nie ma w nim wskazówek. To może być /usr/local/var/log/postgres.loglub /usr/local/var/postgres/server.logewentualnie w innym miejscu. Jeśli zainstalowałeś z Homebrew, możesz znaleźć lokalizację w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist.

Tamlyn
źródło
2

Miałem ten sam problem. W większości przypadków problemem jest fakt, że istnieje plik resztkowy

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

co działa dla większości ludzi, ale mój przypadek był inny - próbowałem googlować przez ostatnie 3 godziny, odinstalowałem postresql na OSX przez brew, wyczyściłem bazę danych, nic nie działało.

W końcu zauważyłem, że miałem problem z naparami, które pojawiały się zawsze, gdy próbowałem coś zainstalować.

Error: Permission denied @ rb_sysopen - /private/tmp/github_api_....

lub coś podobnego na końcu instalacji.

Po prostu to zrobiłem sudo chmod -R 777 /private/tmpi wreszcie działa!

Zapisuję to, ponieważ może to być rozwiązanie dla kogoś innego

Maciej Pk
źródło
1

Idź /var/log/ i uruchom kota postgres.log Tutaj znajdziesz przyczynę niepowodzenia postgresu. Jeśli jest to inteligentne zamknięcie, prawdopodobnie Twoja icu4cwersja (biblioteka C ++ dla Unicode) nie jest odpowiednia, z którą jest połączona postgres. Więc uruchom następujące polecenia.

brew upgrade brew cleanup To powinno działać;)

Shishir
źródło
Może brew stylepóźniej uciekać, jeśli brew cleanupzepsuje Homebrew.
olliezhu
0

Musiałem poszukać tego postu kilka razy, aby rozwiązać ten problem. Jest jeszcze jedna poprawka, która dotyczy również podobnych problemów z innymi uruchomionymi programami.

Właśnie odkryłem, że możesz użyć następujących dwóch poleceń.

$ top

Spowoduje to wyświetlenie wszystkich aktualnie wykonywanych działań wraz z ich numerami pid. Gdy znajdziesz postgres i powiązany pid

$ kill numer_pid

cohart
źródło
0

Właśnie dostałem ten sam problem, ponieważ umieściłem moją maszynę ( ubuntu) do aktualizacji i wystąpił błąd:

nie można połączyć się z serwerem: brak takiego pliku lub katalogu Czy serwer działa lokalnie i akceptuje połączenia w gnieździe domeny uniksowej „/var/run/postgresql/.s.PGSQL.5432”?

Po zakończeniu procesu aktualizacji po ponownym uruchomieniu zniknął błąd systemu. I działa jak urok jak wcześniej. Wydaje mi się, że tak się stało, gdy pg aktualizowało się i rozpoczął się kolejny proces.

Gagan Gami
źródło
0

SUPER NEWBIE ALERT: Właśnie uczę się tworzenia stron internetowych, a konkretny samouczek, który śledziłem, mówi, że muszę zainstalować Postgres, ale tak naprawdę nie wspomniałem, że muszę go uruchomić ... Po otwarciu aplikacji Postgres wszystko było w porządku i elegant.

Lorenzo
źródło
0

Odpowiedź Jagdisha Barabari dała mi wskazówkę potrzebną do rozwiązania tego problemu. Okazuje się, że były zainstalowane dwie wersje postgresql, podczas gdy tylko jedna była uruchomiona. Usunięcie wszystkich plików postgresql i ponowna instalacja najnowszej wersji rozwiązało ten problem.

5280 Anioł
źródło
0

Usunąłem / usr / lib z LD_LIBRARY_PATH i zadziałało. Pracowałem w dokerfile postgres: alpine.

ddtraveller
źródło