Wenn ich den Postgres-Server (v9.0.1) lade, bekomme ich eine Panik, die den Start verhindert:
PANIC: Es konnte kein gültiger Prüfpunktdatensatz gefunden werden
Wie kann ich das beheben?
Wenn ich den Postgres-Server (v9.0.1) lade, bekomme ich eine Panik, die den Start verhindert:
PANIC: Es konnte kein gültiger Prüfpunktdatensatz gefunden werden
Wie kann ich das beheben?
Antworten:
Es wird nach einem Prüfpunktdatensatz im Transaktionsprotokoll gesucht, der wahrscheinlich nicht vorhanden 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, wird folgende Meldung angezeigt:
Der Datenbankserver wurde nicht sauber heruntergefahren. Das Zurücksetzen des Transaktionsprotokolls kann zum Verlust von Daten führen. Wenn Sie trotzdem fortfahren möchten
-f
, erzwingen Sie das Zurücksetzen.
Sie können dann den Anweisungen folgen und mit ausführen -f
, um das Update zu erzwingen:
# Postgres >= 10
pg_resetwal -f DATADIR
# Postgres < 10
pg_resetxlog -f DATADIR
Das sollte das Transaktionsprotokoll zurücksetzen, es könnte jedoch dazu führen, dass Ihre Datenbank in einem unbestimmten Zustand bleibt, wie in der PostgreSQL-Dokumentation zu folgenden Themenpg_resetwal
erläutert :
Wenn Sie sich
pg_resetwal
beschweren, dass keine gültigen Daten für ermittelt werden könnenpg_control
, können Sie die Ausführung erzwingen, indem Sie die-f
Option (force) angeben. In diesem Fall werden die fehlenden Daten durch plausible Werte ersetzt. Es ist zu erwarten, dass die meisten Felder übereinstimmen. Für die nächste OID, die nächste Transaktions-ID und -Epoche, die nächste Multitransaktions-ID und den nächsten Offset sowie die Felder für den WAL-Startort ist möglicherweise manuelle Unterstützung erforderlich. Diese Felder können mit den unten beschriebenen Optionen festgelegt werden. Wenn Sie nicht für alle diese Felder die richtigen Werte ermitteln können,-f
kann weiterhin verwendet werden, aber die wiederhergestellte Datenbank muss mit noch mehr Misstrauen als gewöhnlich behandelt werden: Ein sofortiger Speicherauszug und ein erneutes Laden sind unerlässlich. Führen Sie vor dem Dump keine datenmodifizierenden Vorgänge in der Datenbank aus, da eine solche Aktion die Beschädigung wahrscheinlich verschlimmern wird.
pg_resetwal /usr/local/var/postgres/
dann laufende Postgres wie postgres -D /usr/local/var/postgres
bei mir funktioniert.
Ich verwende 9.1.7 und finde, dass Folgendes erfolgreich ausgeführt wurde:
/usr/lib/postgresql/9.1/bin/pg_resetxlog -f /var/lib/postgresql/9.1/main
Ihr letztes Argument für den pg_resetxlog
Befehl sollte der Speicherort auf der Festplatte sein, an dem postgres Ihre Datenbankdaten speichert.
Wie hier angegeben, sollte pg_resetxlog nicht ausgeführt werden. Die Antworten, die sich darauf beziehen, sind schlechte Ratschläge. Unter der Annahme, dass der Fehler in einem Kontext der Kopier- / Replikationsinstanz aufgetreten ist, bietet der Link eine prägnantere Möglichkeit zum Kopieren / Replizieren mitpg_basebackup