Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 3b2f910

Browse files
author
Alexander Korotkov
committed
Fix MaxHeapTupleSize: take HeapPageSpecialData into account.
1 parent adcc6d6 commit 3b2f910

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

src/include/access/htup_details.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@ do { \
601601
* ItemIds and tuples have different alignment requirements, don't assume that
602602
* you can, say, fit 2 tuples of size MaxHeapTupleSize/2 on the same page.
603603
*/
604-
#define MaxHeapTupleSize (BLCKSZ - MAXALIGN(SizeOfPageHeaderData + sizeof(ItemIdData)))
604+
#define MaxHeapTupleSize (BLCKSZ - MAXALIGN(SizeOfPageHeaderData + sizeof(ItemIdData)) - MAXALIGN(sizeof(HeapPageSpecialData)))
605605
#define MinHeapTupleSize MAXALIGN(SizeofHeapTupleHeader)
606606

607607
/*

src/test/regress/expected/insert.out

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,3 +694,17 @@ insert into returningwrtest values (2, 'foo') returning returningwrtest;
694694
(1 row)
695695

696696
drop table returningwrtest;
697+
-- Check for MaxHeapTupleSize
698+
create table maxheaptuplesize_test(value text);
699+
alter table maxheaptuplesize_test alter column value set storage external;
700+
insert into maxheaptuplesize_test values (repeat('x', 8104));
701+
insert into maxheaptuplesize_test values (repeat('x', 8112));
702+
insert into maxheaptuplesize_test values (repeat('x', 8120));
703+
insert into maxheaptuplesize_test values (repeat('x', 8128));
704+
insert into maxheaptuplesize_test values (repeat('x', 8136));
705+
insert into maxheaptuplesize_test values (repeat('x', 8144));
706+
insert into maxheaptuplesize_test values (repeat('x', 8152));
707+
insert into maxheaptuplesize_test values (repeat('x', 8160));
708+
insert into maxheaptuplesize_test values (repeat('x', 8168));
709+
insert into maxheaptuplesize_test values (repeat('x', 8176));
710+
drop table maxheaptuplesize_test;

src/test/regress/sql/insert.sql

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,3 +419,18 @@ alter table returningwrtest2 drop c;
419419
alter table returningwrtest attach partition returningwrtest2 for values in (2);
420420
insert into returningwrtest values (2, 'foo') returning returningwrtest;
421421
drop table returningwrtest;
422+
423+
-- Check for MaxHeapTupleSize
424+
create table maxheaptuplesize_test(value text);
425+
alter table maxheaptuplesize_test alter column value set storage external;
426+
insert into maxheaptuplesize_test values (repeat('x', 8104));
427+
insert into maxheaptuplesize_test values (repeat('x', 8112));
428+
insert into maxheaptuplesize_test values (repeat('x', 8120));
429+
insert into maxheaptuplesize_test values (repeat('x', 8128));
430+
insert into maxheaptuplesize_test values (repeat('x', 8136));
431+
insert into maxheaptuplesize_test values (repeat('x', 8144));
432+
insert into maxheaptuplesize_test values (repeat('x', 8152));
433+
insert into maxheaptuplesize_test values (repeat('x', 8160));
434+
insert into maxheaptuplesize_test values (repeat('x', 8168));
435+
insert into maxheaptuplesize_test values (repeat('x', 8176));
436+
drop table maxheaptuplesize_test;

0 commit comments

Comments
 (0)