diff options
-rw-r--r-- | src/backend/access/nbtree/nbtdedup.c | 3 | ||||
-rw-r--r-- | src/include/access/nbtree.h | 8 |
2 files changed, 7 insertions, 4 deletions
diff --git a/src/backend/access/nbtree/nbtdedup.c b/src/backend/access/nbtree/nbtdedup.c index 0207421a5d..9e15ae5758 100644 --- a/src/backend/access/nbtree/nbtdedup.c +++ b/src/backend/access/nbtree/nbtdedup.c @@ -566,6 +566,8 @@ _bt_dedup_finish_pending(Page newpage, BTDedupState state) { /* Use original, unchanged base tuple */ tuplesz = IndexTupleSize(state->base); + Assert(tuplesz == MAXALIGN(IndexTupleSize(state->base))); + Assert(tuplesz <= BTMaxItemSize(newpage)); if (PageAddItem(newpage, (Item) state->base, tuplesz, tupoff, false, false) == InvalidOffsetNumber) elog(ERROR, "deduplication failed to add tuple to page"); @@ -585,6 +587,7 @@ _bt_dedup_finish_pending(Page newpage, BTDedupState state) state->intervals[state->nintervals].nitems = state->nitems; Assert(tuplesz == MAXALIGN(IndexTupleSize(final))); + Assert(tuplesz <= BTMaxItemSize(newpage)); if (PageAddItem(newpage, (Item) final, tuplesz, tupoff, false, false) == InvalidOffsetNumber) elog(ERROR, "deduplication failed to add tuple to page"); diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index 52a422793b..8e4f6864e5 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -162,10 +162,10 @@ typedef struct BTMetaPageData * attribute, which we account for here. */ #define BTMaxItemSize(page) \ - MAXALIGN_DOWN((PageGetPageSize(page) - \ - MAXALIGN(SizeOfPageHeaderData + 3*sizeof(ItemIdData)) - \ - MAXALIGN(sizeof(BTPageOpaqueData))) / 3) - \ - MAXALIGN(sizeof(ItemPointerData)) + (MAXALIGN_DOWN((PageGetPageSize(page) - \ + MAXALIGN(SizeOfPageHeaderData + 3*sizeof(ItemIdData)) - \ + MAXALIGN(sizeof(BTPageOpaqueData))) / 3) - \ + MAXALIGN(sizeof(ItemPointerData))) #define BTMaxItemSizeNoHeapTid(page) \ MAXALIGN_DOWN((PageGetPageSize(page) - \ MAXALIGN(SizeOfPageHeaderData + 3*sizeof(ItemIdData)) - \ |