From a7b9d24e4e00048bf9d99b197996476dcf9492de Mon Sep 17 00:00:00 2001 From: Peter Geoghegan Date: Sat, 28 Mar 2020 20:25:03 -0700 Subject: [PATCH] Make deduplication use number of key attributes. Use IndexRelationGetNumberOfKeyAttributes() rather than IndexRelationGetNumberOfAttributes() when determining whether or not two index tuples are suitable for merging together into a single posting list tuple. This is a little bit tidier. It brings affected code in nbtdedup.c a little closer to similar, related code in nbtsplitloc.c. --- src/backend/access/nbtree/nbtdedup.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/access/nbtree/nbtdedup.c b/src/backend/access/nbtree/nbtdedup.c index 2434ce134bf..b20faf693da 100644 --- a/src/backend/access/nbtree/nbtdedup.c +++ b/src/backend/access/nbtree/nbtdedup.c @@ -68,7 +68,7 @@ _bt_dedup_one_page(Relation rel, Buffer buf, Relation heapRel, int ndeletable = 0; Size pagesaving = 0; bool singlevalstrat = false; - int natts = IndexRelationGetNumberOfAttributes(rel); + int nkeyatts = IndexRelationGetNumberOfKeyAttributes(rel); /* * We can't assume that there are no LP_DEAD items. For one thing, VACUUM @@ -182,7 +182,7 @@ _bt_dedup_one_page(Relation rel, Buffer buf, Relation heapRel, _bt_dedup_start_pending(state, itup, offnum); } else if (state->deduplicate && - _bt_keep_natts_fast(rel, state->base, itup) > natts && + _bt_keep_natts_fast(rel, state->base, itup) > nkeyatts && _bt_dedup_save_htid(state, itup)) { /* @@ -519,19 +519,19 @@ static bool _bt_do_singleval(Relation rel, Page page, BTDedupState state, OffsetNumber minoff, IndexTuple newitem) { - int natts = IndexRelationGetNumberOfAttributes(rel); + int nkeyatts = IndexRelationGetNumberOfKeyAttributes(rel); ItemId itemid; IndexTuple itup; itemid = PageGetItemId(page, minoff); itup = (IndexTuple) PageGetItem(page, itemid); - if (_bt_keep_natts_fast(rel, newitem, itup) > natts) + if (_bt_keep_natts_fast(rel, newitem, itup) > nkeyatts) { itemid = PageGetItemId(page, PageGetMaxOffsetNumber(page)); itup = (IndexTuple) PageGetItem(page, itemid); - if (_bt_keep_natts_fast(rel, newitem, itup) > natts) + if (_bt_keep_natts_fast(rel, newitem, itup) > nkeyatts) return true; }