From 000efc3dfdf425136ef9564e86d1800cbe584e75 Mon Sep 17 00:00:00 2001
From: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date: Tue, 9 Nov 2010 17:40:09 +0200
Subject: [PATCH] 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.
---
 src/backend/access/heap/rewriteheap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c
index 0bd18650682..19ca302ebb9 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");
-- 
GitLab