mirror of
https://github.com/postgres/postgres.git
synced 2025-11-18 02:02:55 +03:00
At update of non-LP_NORMAL TID, fail instead of corrupting page header.
The right mix of DDL and VACUUM could corrupt a catalog page header such that PageIsVerified() durably fails, requiring a restore from backup. This affects only catalogs that both have a syscache and have DDL code that uses syscache tuples to construct updates. One of the test permutations shows a variant not yet fixed. This makes !TransactionIdIsValid(TM_FailureData.xmax) possible with TM_Deleted. I think core and PGXN are indifferent to that. Per bug #17821 from Alexander Lakhin. Back-patch to v13 (all supported versions). The test case is v17+, since it uses INJECTION_POINT. Discussion: https://postgr.es/m/17821-dd8c334263399284@postgresql.org
This commit is contained in:
3
src/backend/utils/cache/inval.c
vendored
3
src/backend/utils/cache/inval.c
vendored
@@ -123,6 +123,7 @@
|
||||
#include "storage/sinval.h"
|
||||
#include "storage/smgr.h"
|
||||
#include "utils/catcache.h"
|
||||
#include "utils/injection_point.h"
|
||||
#include "utils/inval.h"
|
||||
#include "utils/memdebug.h"
|
||||
#include "utils/memutils.h"
|
||||
@@ -1134,6 +1135,8 @@ AtEOXact_Inval(bool isCommit)
|
||||
/* Must be at top of stack */
|
||||
Assert(transInvalInfo->my_level == 1 && transInvalInfo->parent == NULL);
|
||||
|
||||
INJECTION_POINT("AtEOXact_Inval-with-transInvalInfo");
|
||||
|
||||
if (isCommit)
|
||||
{
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user