summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Korotkov2024-05-26 04:14:12 +0000
committerAlexander Korotkov2024-05-26 04:14:12 +0000
commit945ec4c4bca1e1c4347cd3f93135e96770ac1b4c (patch)
tree6e15673ac3d19ecd99f2deae588d01625c7ca7dd
parent4cf9aab2147683100a79bf66a2aa87811674d66c (diff)
amcheck: Fixes for right page check during unique constraint check
* Don't forget to pfree() the right page when it's to be ignored. * Report error on unexpected non-leaf right page even if this page is not to be ignored. This restores the logic which was unintendedly changed in 97e5b0026f. Reported-by: Pavel Borisov
-rw-r--r--contrib/amcheck/verify_nbtree.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c
index 4347f9594c9..34990c5cea3 100644
--- a/contrib/amcheck/verify_nbtree.c
+++ b/contrib/amcheck/verify_nbtree.c
@@ -1901,17 +1901,19 @@ bt_target_page_check(BtreeCheckState *state)
if (P_IGNORE(topaque))
{
- if (unlikely(!P_ISLEAF(topaque)))
- ereport(ERROR,
- (errcode(ERRCODE_INDEX_CORRUPTED),
- errmsg("right block of leaf block is non-leaf for index \"%s\"",
- RelationGetRelationName(state->rel)),
- errdetail_internal("Block=%u page lsn=%X/%X.",
- state->targetblock,
- LSN_FORMAT_ARGS(state->targetlsn))));
- else
- break;
+ pfree(rightpage);
+ break;
}
+
+ if (unlikely(!P_ISLEAF(topaque)))
+ ereport(ERROR,
+ (errcode(ERRCODE_INDEX_CORRUPTED),
+ errmsg("right block of leaf block is non-leaf for index \"%s\"",
+ RelationGetRelationName(state->rel)),
+ errdetail_internal("Block=%u page lsn=%X/%X.",
+ state->targetblock,
+ LSN_FORMAT_ARGS(state->targetlsn))));
+
itemid = PageGetItemIdCareful(state, rightblock_number,
rightpage,
rightfirstoffset);