Postgres DB nie uruchamia się w systemie Mac OSX: ERROR mówi: połączenia w gnieździe domeny Unix [zamknięte]

81

Zainstalowałem Postgresql, a następnie uruchomiłem kilka aplikacji railsowych na moim lokalnym Mac OSX Mountain Lion i utworzyłem bazy danych itp. Dzisiaj po chwili, gdy uruchomiłem pgAdminIII i próbowałem uruchomić serwer bazy danych, otrzymałem ten błąd:

wprowadź opis obrazu tutaj

Szybkie Google pokazało ten post. Więcej przeglądania wskazywało na fakt, że może znajdować się jakiś plik postmaster.pid, który może być główną przyczyną tego problemu. Jeśli usunę, wszystko będzie dobrze.

Jednak zanim usuwam rzeczy z mojego komputera, chciałem się upewnić, że debuguję to w systematyczny sposób, który nie spowoduje więcej problemów.

Gdzieś przeczytałem, że przed usunięciem tego pliku muszę uruchomić to polecenie:

  ps auxw | grep post

Jeśli nie otrzymam żadnych wyników, można usunąć plik. Inaczej nie. Cóż, mam taki wynik tego polecenia:

  AM               476   0.0  0.0  2423356    184 s000  R+    9:28pm   0:00.00 grep post

Więc teraz, oczywiście, jestem całkowicie zdezorientowany.

Więc co powinienem zrobić?

Oto część mojego dziennika błędów serwera postgres:

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

Postgresql nadal nie działa, nadal pojawia się ten sam błąd i nic się nie zmieniło. Jestem zbyt tchórzliwy, żeby usuwać rzeczy bez sprawdzania SO.

Czy niektórzy z was, eksperci, mogą poprowadzić nooba.

Dzięki

bandytaKing
źródło
Po pierwsze, nie jestem ekspertem. To powiedziawszy, wygląda na to, że twoja baza danych nie została poprawnie zamknięta. Chciałbym usunąć plik pid i spróbować uruchomić bazę danych.
fbynite
Tak, to jest to, co chcę zrobić, ale gdzieś przeczytałem, że może to spowodować trwałe uszkodzenie bazy danych, jeśli pid jest uruchomiony w tym czasie. Nie wiem, o co w tym wszystkim chodzi
bandyta Kinga
@banditKing Nigdy nie powinieneś usuwać postmaster.pid. Serwer usuwa go podczas uruchamiania, jeśli jest nieprawidłowy (nieaktualny) i jest ważny dla ochrony danych. Proszę wyjaśnić, w jaki sposób zainstalowałeś PostgreSQL na swoim komputerze, aby rozpocząć - za pomocą instalatora EnterpriseDB, homebrew, Postgres.app, co? Wspomnij także o wersji PostgreSQL. Wreszcie, jeśli jawnie dodasz "localhost" do opcji połączenia w Pgadmin-III, czy to zadziała? Jeśli tak, gryzie cię naprawdę zła decyzja dotycząca pakowania, którą Apple podjął jakiś czas temu ...
Craig Ringer.
@CraigRinger dzięki za wyjaśnienie. Nie pamiętam, jak to zainstalowałem, to było jakiś czas temu. Czy jest coś, co mogę zrobić? Lub dane są tylko danymi testowymi, więc w najgorszym przypadku mogę odinstalować i ponownie zainstalować. Jakieś dobre blogi / samouczki, jak to zrobić poprawnie?
banditKing
1
@banditKing Próbowałeś zrestartować komputer? Możesz zidentyfikować sposób instalacji z tego: wiki.postgresql.org/wiki/Installers/Mac_OS_X . Wygląda na to, że prawdopodobnie korzystałeś z Homebrew. Jeśli serwer PostgreSQL jest nieprawidłowo braku usunąć postmaster.pidwtedy można usunąć go po sprawdzeniu, że nie istnieją żadne postgresprocesy uruchomione, to jest po prostu niezbędna , aby mieć pewność, że w rzeczywistości są żadne procesy PostgreSQL. postmaster.pidJednak niepowodzenie serwera w usuwaniu nieaktualnych plików wydaje mi się błędem.
Craig Ringer

Odpowiedzi:

193

Miałem dziś ten sam problem na Macu Sierra. W Mac Sierra możesz znaleźć w postmaster.pidśrodku /Users/<user_name>/Library/Application Support/Postgres/var-9.6. Usuń, postmaster.pida problem zostanie rozwiązany.

r3b00t
źródło
19
Usunięto postmaster.pidw tej lokalizacji, a problem został rozwiązany. Dzięki!
JLF
1
Tutaj również musiałem znaleźć postmaster.pidplik, ponieważ używam Postgres.app
Jarsen
3
W przypadku Postgres.app jest tak samo: może to być to, że znajduje się tutaj/Users/<user>/Library/Application\ Support/Postgres/var-10/postmaster.pid
Simon Franzen
1
Używam również Postgres.app z systemem v10. Jeśli mój Mac nieoczekiwanie wyłączył się, podczas gdy Postgres jest uruchomiony, muszę przejść i usunąć plik postmaster.pid po ponownym uruchomieniu komputera. Czy ktoś wie, czy takie jest oczekiwane zachowanie aplikacji? Wygląda na dziwny projekt, jeśli jest zamierzony.
Alexander,
Upewnij się, że proces został spowolniony przed usunięciem tego pliku. Możesz uruchomić cat postmaster.pidw katalogu, aby zajrzeć i stwierdzić, że nie widzisz PID działającego w czymś takim jak monitor aktywności. Interfejs użytkownika Postgres ostrzeże Cię o tym, ale pomyślałem, że powinienem umieścić to tutaj, zanim ludzie będą chcieli nie chcieć i jak sprawdzić siebie. Powinno też wystarczyć poszukanie postgresw monitorze aktywności i zabicie wszystkiego, co jest z tym związane, lub po prostu zrestartuj system, a następnie usuń plik. Niezrobienie tego może spowodować uszkodzenie bazy danych 🔥
CTS_AE
42

Może się tak zdarzyć, jeśli baza danych nie została poprawnie zamknięta. Aby to naprawić, po prostu usuń postmaster.pidplik. Lokalizacja różni się w zależności od systemu operacyjnego:

System operacyjny Mac:

 rm /Users/<user_name>/Library/Application\ Support/Postgres/var-9.6/postmaster.pid

lub używając Postgres.app:

 rm /Users/<user>/Library/Application\ Support/Postgres/var-10/postmaster.pid

Linux:

 rm /usr/local/var/postgres/postmaster.pid
sqren
źródło
2
Dzięki, to rozwiązanie działa! Po usunięciu postmaster.pidi uruchomieniu postgres -D /usr/local/var/postgreszwraca się do mnie informacja o przyczynie błędu: „system bazy danych nie został poprawnie zamknięty; trwa automatyczne odzyskiwanie”
Hoang Le
to rozwiązało mój problem
Fabrice Yopa
To działa. W moim przypadku plik pid nie został usunięty z powodu twardego restartu, więc po prostu musiałem go wykonać.
George C
21

Mam już działającą bazę danych.

Oto kroki, które podjąłem:

  1. Ponownie uruchomiłem komputer
  2. Otworzyłem terminal i pobiegłem cd /
  3. Wtedy zrobiłem ls -la
  4. Zapewniony, że mogę się dostać MackintoshHD/usr/local/var/postgres
  5. Wtedy zrobił ls -la
  6. Tutaj widziałem plik postmaster.pid
  7. Uruchomiłem to polecenie, cp postmaster.pid ~/Desktopktóre skopiowało plik na mój pulpit, lubię to zrobić, jeśli usuwam pliki. Jeśli coś pójdzie źle, mogę to odłożyć
  8. Następnie uruchomiłem to polecenie, aby usunąć plik z katalogu postgres rm -r postmaster.pid
  9. Poszedłem do mojego pgadmin3 gui i odpaliłem. i Voila zadziałało :)

Dzięki @Craig Ringer za pomoc

bandytaKing
źródło
6
Mojego nie było w / usr / local / var / postgres, ale w / Users / [myhome] / Library / Application Support / Postgres / var-9.5 / - ostatni katalog zależy od twojej wersji, usunął postmaster.pid i działał jak urok, dziękuję
Radek
4

Używam Postgres.app i poniższe działały dla mnie:

Wprowadziłem polecenia do mojego terminala poniżej, lokalizując wcześniej folder Postgres i nie używając „justin”.

$declare -x PGDATA="/Users/justin/Library/Application Support/Postgres/var-9.4"

$pg_ctl restart -m immediate

Jak wyjaśnia Justin w swoim poście, wynik po tym był następujący:

oczekiwanie na wyłączenie serwera ……………………………………………………… nie powiodło się pg_ctl: serwer się nie wyłącza

Po ponownym wpisaniu polecenia:

$pg_ctl restart -m immediate

Zadziałało i otrzymałem wiadomość:

pg_ctl: stary proces serwera (PID: 373) wydaje się zniknąć, uruchamiając serwer mimo to uruchamiający serwer LOG: system bazy danych został przerwany; ostatnio znany w 2015-07-28 18:15:26 PDT LOG: system bazy danych nie został poprawnie zamknięty; automatyczne odzyskiwanie w toku LOG: rekord o zerowej długości przy 0 / 4F0F7A8 LOG: ponowne wykonanie nie jest wymagane LOG: system bazy danych jest gotowy do przyjmowania połączeń LOG: uruchomiono autoodkurzacz

Źródło

Andrew Southard
źródło