From 71802cfc4326864bb635d30f441b53bb42929de9 Mon Sep 17 00:00:00 2001 From: "Chao Li (Evan)" Date: Wed, 25 Feb 2026 10:43:43 +0800 Subject: [PATCH v1] amcheck: fix missing corruption error in allequalimage validation In bt_index_check_callback(), amcheck checks that a metapage allequalimage flag is consistent with _bt_allequalimage(). The ereport(ERROR) was placed inside the loop that detects whether any key attribute has rd_opfamily[i] == INTERVAL_BTREE_FAM_OID. That made error reporting conditional on finding the interval btree opfamily: mismatches on other opfamilies could be missed. This fix moves the ereport out of the for loop, so that reports corruption unconditionally, while keeping the interval-specific hint conditional. Author: Chao Li Reviewed-by: Discussion: https://postgr.es/m/ --- contrib/amcheck/verify_nbtree.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c index e04b7ca694e..574adc807d3 100644 --- a/contrib/amcheck/verify_nbtree.c +++ b/contrib/amcheck/verify_nbtree.c @@ -336,14 +336,16 @@ bt_index_check_callback(Relation indrel, Relation heaprel, void *state, bool rea if (indrel->rd_opfamily[i] == INTERVAL_BTREE_FAM_OID) { has_interval_ops = true; - ereport(ERROR, - (errcode(ERRCODE_INDEX_CORRUPTED), - errmsg("index \"%s\" metapage incorrectly indicates that deduplication is safe", - RelationGetRelationName(indrel)), - has_interval_ops - ? errhint("This is known of \"interval\" indexes last built on a version predating 2023-11.") - : 0)); + break; } + + ereport(ERROR, + (errcode(ERRCODE_INDEX_CORRUPTED), + errmsg("index \"%s\" metapage incorrectly indicates that deduplication is safe", + RelationGetRelationName(indrel)), + has_interval_ops + ? errhint("This is known of \"interval\" indexes last built on a version predating 2023-11.") + : 0)); } /* Check index, possibly against table it is an index on */ -- 2.50.1 (Apple Git-155)