PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

errore postgresql PANIC:impossibile individuare un record di checkpoint valido

Sta cercando un record di checkpoint nel registro delle transazioni che probabilmente non esiste o è danneggiato. Puoi determinare se questo è il caso eseguendo:

# Postgres >= 10
pg_resetwal DATADIR

# Postgres < 10
pg_resetxlog DATADIR

Se il registro delle transazioni è danneggiato, vedrai un messaggio del tipo:

Il server del database non è stato arrestato correttamente. La reimpostazione del registro delle transazioni potrebbe causare la perdita di dati. Se vuoi procedere comunque, usa -f per forzare il ripristino.

Puoi quindi seguire le istruzioni ed eseguire con -f per forzare l'aggiornamento:

# Postgres >= 10
pg_resetwal -f DATADIR

# Postgres < 10
pg_resetxlog -f DATADIR 

Ciò dovrebbe ripristinare il registro delle transazioni, tuttavia potrebbe lasciare il database in uno stato indeterminato come spiegato nella documentazione di PostgreSQL su pg_resetwal :

Se pg_resetwal si lamenta di non poter determinare dati validi per pg_control , puoi forzarlo a procedere comunque specificando il -f opzione (forza). In questo caso i dati mancanti verranno sostituiti con valori plausibili. È prevedibile che la maggior parte dei campi corrisponda, ma potrebbe essere necessaria l'assistenza manuale per i campi OID successivi, ID transazione ed epoca successivi, ID multitransazione e offset successivi e WAL posizione iniziale. Questi campi possono essere impostati utilizzando le opzioni discusse di seguito. Se non sei in grado di determinare i valori corretti per tutti questi campi, -f può ancora essere utilizzato, ma il database recuperato deve essere trattato con ancora più sospetto del solito:un dump e un ricaricamento immediati è d'obbligo. Non eseguire alcuna operazione di modifica dei dati nel database prima di eseguire il dump, poiché è probabile che tale azione peggiori la corruzione.