PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgresql-Fehler PANIC:Es konnte kein gültiger Checkpoint-Datensatz gefunden werden

Es sucht nach einem Prüfpunkteintrag im Transaktionsprotokoll, der wahrscheinlich nicht existiert oder beschädigt ist. Sie können feststellen, ob dies der Fall ist, indem Sie Folgendes ausführen:

# Postgres >= 10
pg_resetwal DATADIR

# Postgres < 10
pg_resetxlog DATADIR

Wenn das Transaktionsprotokoll beschädigt ist, sehen Sie eine Meldung wie:

Der Datenbankserver wurde nicht ordnungsgemäß heruntergefahren. Durch das Zurücksetzen des Transaktionsprotokolls können Daten verloren gehen. Wenn Sie trotzdem fortfahren möchten, verwenden Sie -f Zurücksetzen erzwingen.

Sie können dann den Anweisungen folgen und mit -f ausführen um das Update zu erzwingen:

# Postgres >= 10
pg_resetwal -f DATADIR

# Postgres < 10
pg_resetxlog -f DATADIR 

Das sollte das Transaktionsprotokoll zurücksetzen, aber es könnte Ihre Datenbank in einem unbestimmten Zustand belassen, wie in der PostgreSQL-Dokumentation auf pg_resetwal erklärt :

Wenn pg_resetwal beschwert sich, dass es keine gültigen Daten für pg_control ermitteln kann , können Sie es erzwingen, trotzdem fortzufahren, indem Sie -f angeben (erzwingen) Option. In diesem Fall werden die fehlenden Daten durch plausible Werte ersetzt. Es kann erwartet werden, dass die meisten Felder übereinstimmen, aber für die Felder nächste OID, nächste Transaktions-ID und Epoche, nächste Multitransaktions-ID und Offset und WAL-Startortfelder kann manuelle Unterstützung erforderlich sein. Diese Felder können mit den unten beschriebenen Optionen eingestellt werden. Wenn Sie nicht in der Lage sind, für alle diese Felder korrekte Werte zu ermitteln, -f kann noch verwendet werden, aber die wiederhergestellte Datenbank muss mit noch mehr Misstrauen als sonst behandelt werden:ein sofortiges Dump und Reload ist zwingend erforderlich. Führen Sie keine datenändernden Operationen in der Datenbank aus, bevor Sie sie sichern, da jede solche Aktion die Beschädigung wahrscheinlich verschlimmert.