Hledá záznam kontrolního bodu v protokolu transakcí, který pravděpodobně neexistuje nebo je poškozený. Zda se jedná o tento případ, můžete zjistit spuštěním:
# Postgres >= 10
pg_resetwal DATADIR
# Postgres < 10
pg_resetxlog DATADIR
Pokud je protokol transakcí poškozen, zobrazí se zpráva jako:
Databázový server nebyl vypnut čistě. Resetování protokolu transakcí může způsobit ztrátu dat. Pokud chcete přesto pokračovat, použijte
-f
vynutit reset.
Poté můžete postupovat podle pokynů a spustit pomocí -f
vynutit aktualizaci:
# Postgres >= 10
pg_resetwal -f DATADIR
# Postgres < 10
pg_resetxlog -f DATADIR
To by mělo resetovat transakční protokol, ale mohlo by to nechat vaši databázi v neurčitém stavu, jak je vysvětleno v dokumentaci PostgreSQL na pg_resetwal
:
Pokud
pg_resetwal
si stěžuje, že nemůže určit platná data propg_control
, můžete jej vynutit, aby pokračoval, zadáním-f
(vynutit) možnost. V tomto případě budou chybějící údaje nahrazeny věrohodnými hodnotami. Lze očekávat, že většina polí se bude shodovat, ale pro pole OID, příští ID transakce a epocha, ID a offset další multitransakce a výchozí umístění WAL může být zapotřebí ruční pomoc. Tato pole lze nastavit pomocí níže uvedených možností. Pokud nejste schopni určit správné hodnoty pro všechna tato pole,-f
lze stále používat, ale s obnovenou databází je třeba zacházet s ještě větší nedůvěrou než obvykle:okamžitý výpis a opětovné načtení je nutností. Než provedete výpis, neprovádějte v databázi žádné operace upravující data, protože jakákoli taková akce pravděpodobně zhorší korupci.