Używam postgres z homebrew w moim OS X, ale po ponownym uruchomieniu systemu, czasami postgres nie uruchamia się po restarcie, a więc ręcznie próbował uruchomić go postgres -D /usr/local/var/postgres
, ale potem wystąpił błąd z następującym komunikatem: FATAL: could not open directory "pg_tblspc": No such file or directory
.
Ostatnim razem, kiedy to wystąpiło, nie mogłem przywrócić go do pierwotnego stanu, więc postanowiłem odinstalować cały system postgres, a następnie ponownie go zainstalować i utworzyć użytkowników, tabele, zestawy danych itp. To było obrzydliwe, ale często występuje w moim systemie, powiedzmy raz na kilka miesięcy.
Dlaczego więc pg_tblspc
często gubi plik? Czy mogę coś zrobić, aby uniknąć utraty pliku?
Nie uaktualniłem swojego homebrew i postgres do najnowszej wersji (tj. Korzystałem z tej samej wersji). Ponadto wszystko, co zrobiłem w bazie danych Postgres, to usuwanie tabeli i wypełnianie nowych danych każdego dnia. Nie zmieniłem użytkownika, hasła itp.
EDYCJA (mbannert): Czułem potrzebę dodania tego, ponieważ ten wątek jest największym hitem w Google dla tego problemu i dla wielu symptom jest inny. Homebrewers prawdopodobnie napotkają ten komunikat o błędzie:
No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
Jeśli więc doświadczyłeś tego po aktualizacji Yosemite, jesteś teraz objęty czytaniem tego wątku.
źródło
pg_tblspc
jest katalog . Jedynym sposobem, w jaki widzę ten katalog i tylko ten losowo znikający katalog, jest uszkodzenie systemu plików lub szczególnie źle działający skaner antywirusowy lub narzędzie do synchronizacji plików.tablespaces
jest, więc nie sądzę, żebym umieścił to w pamięci zewnętrznej.pg_tblspc
nie tylko znika w żadnym systemie, z którym się kiedykolwiek spotkałem, ani nie wyobrażam sobie zdrowego powodu. Bardzo trudno będzie powiedzieć, co wyróżnia Twój system bez większej ilości szczegółów.Odpowiedzi:
Rozwiązany ... częściowo.
Najwyraźniej instalacja najnowszych wersji OS X (np. Yosemite lub El Capitan) usuwa niektóre katalogi
/usr/local/var/postgres
.Aby to naprawić, wystarczy odtworzyć brakujące katalogi:
Lub, bardziej zwięźle ( dzięki Nate ):
Ponowne
pg_ctl start -D /usr/local/var/postgres
uruchamianie uruchamia teraz serwer normalnie i, przynajmniej dla mnie, bez utraty danych.AKTUALIZACJA
W moim systemie niektóre z tych katalogów są puste, nawet gdy działa Postgres. Może w ramach operacji „czyszczenia” Yosemite usuwa puste katalogi? W każdym razie poszedłem naprzód i utworzyłem plik „.keep” w każdym katalogu, aby zapobiec późniejszemu usunięciu.
Uwaga : Utworzenie
.keep
pliku w tych katalogach spowoduje pewne zakłócenia w pliku dziennika, ale nie wydaje się mieć negatywnego wpływu na nic innego.źródło
mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/
itouch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep
could not open temporary-files directory "pg_tblspc/.keep/PG_9.3_201306121/pgsql_tmp": Not a directory
mkdir /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp,pg_replslot}
Odpowiedź Donavana jest natychmiastowa, chciałem tylko dodać, że ponieważ robiłem różne rzeczy z bazą danych (np.
rake db:test
), Szukałem różnych katalogów, które nie zostały wspomniane powyżej i dusiły się, gdy nie były obecne, w mój przypadekpg_logical/mappings
, więc możesz chcieć skonfigurować terminal działający:i obserwuj, czy brakuje folderów podczas wykonywania typowych czynności w bazie danych.
źródło
Jest to nieco nie na temat, ale warto o tym wspomnieć w ramach procesu odzyskiwania PostgreSQL Yosemite. Miałem taki sam problem jak powyżej ORAZ miałem problem z PostgreSQL „pozornie” działającym w tle, więc nawet po dodaniu katalogów nie mogłem ponownie uruchomić. Próbowałem
pg_ctl stop -m fast
zabić serwer PostgreSQL, ale bez powodzenia. Próbowałem też przejść bezpośrednio do tego procesu,kill PID
ale gdy tylko to zrobiłem, proces PostgreSQL pojawił się ponownie z innym PID.Klucz okazał się
.plist
plikiem załadowanym przez Homebrew ... Dla mnie poprawka:Potem mogłem normalnie uruchomić PostgreSQL.
źródło
launchctl unload ${HOME}/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
ale w zasadzie był to dla mnie ten sam problem i to samo rozwiązanie.Brakujące katalogi muszą znajdować się w katalogu danych PostgreSQL. Domyślny katalog danych to
/usr/local/var/postgres/
. Jeśli skonfigurowałeś inny katalog danych, musisz ponownie utworzyć brakujące katalogi. Jeśli zmodyfikowałeś.plist
plik zalecany przez Homebrew , który uruchamia PostgreSQL, możesz tam znaleźć katalog danych:(jest to
-D
opcja, od której zacząłeś postgres :)W powyższym przykładzie utworzyłbyś brakujące katalogi w następujący
/usr/local/pgsql/data
sposób:źródło
Utworzenie brakujących katalogów z pewnością działa, ale naprawiłem to poprzez ponowne zainicjowanie bazy danych postgres, jest to czystsze podejście, aby uniknąć przyszłych problemów.
UWAGA: Podejście to usunie istniejące bazy danych
źródło