"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.

Author: Donovan, 2014-09-22

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.

 932
Author: Donovan,
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.

 9
Author: tony_k,
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.

 6
Author: MCP,
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}
 4
Author: tee,
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.

 0
Author: BTB,
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
 -20
Author: Greg,
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