From: Heikki Linnakangas Date: Tue, 9 Nov 2010 15:40:09 +0000 (+0200) Subject: In rewriteheap.c (used by VACUUM FULL and CLUSTER), calculate the tuple X-Git-Tag: REL9_1_ALPHA3~199 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=000efc3dfdf425136ef9564e86d1800cbe584e75;p=postgresql In rewriteheap.c (used by VACUUM FULL and CLUSTER), calculate the tuple length stored in the line pointer the same way it's calculated in the normal heap_insert() codepath. As noted by Jeff Davis, the length stored by raw_heap_insert() included padding but the one stored by the normal codepath did not. While the mismatch seems to be harmless, inconsistency isn't good, and the normal codepath has received a lot more testing over the years. Backpatch to 8.3 where the heap rewrite code was introduced. --- diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c index 0bd1865068..19ca302ebb 100644 --- a/src/backend/access/heap/rewriteheap.c +++ b/src/backend/access/heap/rewriteheap.c @@ -641,7 +641,7 @@ raw_heap_insert(RewriteState state, HeapTuple tup) } /* And now we can insert the tuple into the page */ - newoff = PageAddItem(page, (Item) heaptup->t_data, len, + newoff = PageAddItem(page, (Item) heaptup->t_data, heaptup->t_len, InvalidOffsetNumber, false, true); if (newoff == InvalidOffsetNumber) elog(ERROR, "failed to add tuple");