1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-10 17:42:29 +03:00

Add GUC ignore_invalid_pages.

Detection of WAL records having references to invalid pages
during recovery causes PostgreSQL to raise a PANIC-level error,
aborting the recovery. Setting ignore_invalid_pages to on causes
the system to ignore those WAL records (but still report a warning),
and continue recovery. This behavior may cause crashes, data loss,
propagate or hide corruption, or other serious problems.
However, it may allow you to get past the PANIC-level error,
to finish the recovery, and to cause the server to start up.

Author: Fujii Masao
Reviewed-by: Michael Paquier
Discussion: https://www.postgresql.org/message-id/CAHGQGwHCK6f77yeZD4MHOnN+PaTf6XiJfEB+Ce7SksSHjeAWtg@mail.gmail.com
This commit is contained in:
Fujii Masao
2020-01-22 11:56:34 +09:00
parent 79a3efb84d
commit 41c184bc64
3 changed files with 52 additions and 2 deletions

View File

@@ -31,6 +31,9 @@
#include "utils/rel.h"
/* GUC variable */
bool ignore_invalid_pages = false;
/*
* During XLOG replay, we may see XLOG records for incremental updates of
* pages that no longer exist, because their relation was later dropped or
@@ -93,7 +96,8 @@ log_invalid_page(RelFileNode node, ForkNumber forkno, BlockNumber blkno,
if (reachedConsistency)
{
report_invalid_page(WARNING, node, forkno, blkno, present);
elog(PANIC, "WAL contains references to invalid pages");
elog(ignore_invalid_pages ? WARNING : PANIC,
"WAL contains references to invalid pages");
}
/*
@@ -240,7 +244,8 @@ XLogCheckInvalidPages(void)
}
if (foundone)
elog(PANIC, "WAL contains references to invalid pages");
elog(ignore_invalid_pages ? WARNING : PANIC,
"WAL contains references to invalid pages");
hash_destroy(invalid_page_tab);
invalid_page_tab = NULL;