"pg tblspc" brak po instalacji najnowszej wersji OS X (Yosemite lub El Capitan)
Używam postgres z homebrew w moim OS X, ale kiedy restartuję mój system, czasami postgres nie uruchamia się po ponownym uruchomieniu, więc ręcznie próbowałem go uruchomić z postgres -D /usr/local/var/postgres
, ale wystąpił błąd z następującym komunikatem: FATAL: could not open directory "pg_tblspc": No such file or directory
.
Ostatnim razem, gdy tak się stało, nie mogłem go przywrócić do pierwotnego stanu, więc postanowiłem odinstalować cały system postgres, a następnie ponownie zainstalować go i utworzyć użytkowników, tabele, zbiory danych itp... To było obrzydliwe, ale to często występuje w moim systemie, powiedzmy raz na kilka miesięcy.
Więc dlaczego często traci pg_tblspc
Plik? I czy jest coś, co mogę zrobić, aby uniknąć utraty pliku?
Nie zaktualizowałem homebrew i postgres do najnowszej wersji (tzn. używałem tej samej wersji). Ponadto, wszystkie rzeczy, które 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...
EDIT (mbannert): Czułem trzeba to dodać, ponieważ wątek jest najlepszym hitem w google dla tego problemu i dla wielu symptomów 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"?
Tak więc, jeśli doświadczyłeś tego po aktualizacji Yosemite, teraz jesteś objęty tym czytaniem tego wątku.
6 answers
Rozwiązane... częściowo.
Najwyraźniej instalacja najnowszych wersji OS X (np. Yosemite lub El Capitan) usuwa niektóre katalogi w /usr/local/var/postgres
.
Aby to naprawić, wystarczy odtworzyć brakujące katalogi:
mkdir -p /usr/local/var/postgres/pg_commit_ts
mkdir -p /usr/local/var/postgres/pg_dynshmem
mkdir -p /usr/local/var/postgres/pg_logical/mappings
mkdir -p /usr/local/var/postgres/pg_logical/snapshots
mkdir -p /usr/local/var/postgres/pg_replslot
mkdir -p /usr/local/var/postgres/pg_serial
mkdir -p /usr/local/var/postgres/pg_snapshots
mkdir -p /usr/local/var/postgres/pg_stat
mkdir -p /usr/local/var/postgres/pg_stat_tmp
mkdir -p /usr/local/var/postgres/pg_tblspc
mkdir -p /usr/local/var/postgres/pg_twophase
Lub, bardziej zwięźle (Dzięki Nate):
mkdir -p /usr/local/var/postgres/{{pg_commit_ts,pg_dynshmem,pg_replslot,pg_serial,pg_snapshots,pg_stat,pg_stat_tmp,pg_tblspc,pg_twophase},pg_logical/{mappings,snapshots}}
Ponowne uruchomienie pg_ctl start -D /usr/local/var/postgres
teraz uruchamia serwer normalnie i, przynajmniej dla mnie, bez utraty danych.
UPDATE
W moim systemie niektóre z tych katalogów są puste nawet gdy Postgres działa. Może w ramach jakiejś operacji "czyszczenia" Yosemite usuwa puste katalogi? W każdym razie, poszedłem do przodu i stworzył".zachowaj ' plik w każdym katalogu, aby zapobiec dalszemu usuwaniu.
touch /usr/local/var/postgres/{{pg_commit_ts,pg_dynshmem,pg_replslot,pg_serial,pg_snapshots,pg_stat,pg_stat_tmp,pg_tblspc,pg_twophase},pg_logical/{mappings,snapshots}}/.keep
Uwaga : utworzenie pliku .keep
w tych katalogach spowoduje jakiś szum w pliku dziennika, ale wydaje się, że nie wpłynie negatywnie na cokolwiek innego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-16 13:33:48
Donavan ' s odpowiedź jest na miejscu, chciałem tylko dodać, że jak robiłem różne rzeczy z bazy danych (np rake db:test
), poszedł szukać różnych katalogów, które nie zostały wymienione powyżej i Dławić, gdy nie były obecne, w moim przypadku pg_logical/mappings
, więc może chcesz skonfigurować Terminal uruchomiony:
tail -f /usr/local/var/postgres/server.log
I uważaj na brakujące foldery podczas przechodzenia przez typowe działania bazy danych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:18
Jest to nieco off-topic, ale warto tutaj zwrócić uwagę w ramach procesu odzyskiwania PostgreSQL. Miałem ten sam problem jak wyżej i miałem problem z PostgreSQL" pozornie " działającym w tle, więc nawet po dodaniu katalogów nie mogłem zrestartować. Próbowałem użyć pg_ctl stop -m fast
do zabicia serwera PostgreSQL, ale bez powodzenia. Próbowałem również przejść bezpośrednio po procesie za pomocą kill PID
, ale jak tylko to zrobiłem, proces PostgreSQL pojawił się ponownie z innym PID.
Klucz skończył się to plik .plist
, który Homebrew załadował... Fix dla mnie to:
launchctl unload /Users/me/Library/LaunchAgents/homebrew.mxcl.postgresql92.plist
Potem udało mi się normalnie uruchomić PostgreSQL.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-11 13:41:28
Brakujące katalogi muszą być obecne w katalogu danych PostgreSQL. Domyślnym katalogiem danych jest /usr/local/var/postgres/
. Jeśli skonfigurowałeś inny katalog danych, musisz ponownie utworzyć brakujące katalogi. Jeśli zmodyfikowałeś zalecany przez homebrew plik .plist
uruchamiający PostgreSQL, znajdziesz tam katalog danych:
cat ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
(jest to opcja -D
, którą uruchomiłeś postgres:)
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/postgres</string>
<string>-D</string>
<string>/usr/local/pgsql/data</string>
W powyższym przykładzie utworzyłbyś brakujące katalogi w /usr/local/pgsql/data
, Jak więc:
cd /usr/local/pgsql/data
mkdir {pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots,pg_logical}
mkdir pg_logical/{snapshots,mappings}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-11 14:14:35
Miałem taki problem z aplikacją dockerized Rails.
Zamiast pg_tblspc i innych katalogów brakujących w /usr/local/var/postgres, brakowało ich w myRailsApp/tmp / db.
Będziesz chciał użyć podobnej wersji Rozwiązania Donovana, będziesz musiał tylko zmienić, aby mieć poprawną ścieżkę dla swojej aplikacji Rails...
mkdir /myRailsApp/tmp/db/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/
Również, będziesz chciał dodać .zachowaj plik, aby upewnić się, że git nie ignoruje pustych katalogów.
touch /myRailsApp/tmp/db/{pg_tblspc,pg_twophase,pg_stat,pg_stat_tmp,pg_replslot,pg_snapshots}/.keep
Zauważyłem błąd z a .zachowaj w 1 z katalogów, więc po prostu uważnie przeczytaj wyjście wiersza poleceń i dostosuj w razie potrzeby.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-14 23:46:47
Tworzenie brakujących katalogów na pewno działa, ale naprawiłem to poprzez reinicjalizację postgres db, jest to czystsze podejście, aby uniknąć przyszłych problemów.
Uwaga: takie podejście usunie istniejące bazy danych
$ rm -r /usr/local/var/postgres
$ initdb -D /usr/local/var/postgres
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-18 03:47:17