mirror of
https://github.com/postgres/postgres.git
synced 2025-10-25 13:17:41 +03:00
Clean up a couple of ad-hoc computations of the maximum number of tuples
on a page, as suggested by ITAGAKI Takahiro. Also, change a few places that were using some other estimates of max-items-per-page to consistently use MaxOffsetNumber. This is conservatively large --- we could have used the new MaxHeapTuplesPerPage macro, or a similar one for index tuples --- but those places are simply declaring a fixed-size buffer and assuming it will work, rather than actively testing for overrun. It seems safer to size these buffers in a way that can't overflow even if the page is corrupt.
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/access/htup.h,v 1.76 2005/08/20 00:39:59 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/access/htup.h,v 1.77 2005/09/02 19:02:20 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -323,6 +323,16 @@ do { \
|
||||
#define MaxTupleSize \
|
||||
(BLCKSZ - MAXALIGN(sizeof(PageHeaderData) + MaxSpecialSpace))
|
||||
|
||||
/*
|
||||
* MaxHeapTuplesPerPage is an upper bound on the number of tuples that can
|
||||
* fit on one heap page. (Note that indexes could have more, because they
|
||||
* use a smaller tuple header.) We arrive at the divisor because each tuple
|
||||
* must be maxaligned, and it must have an associated item pointer.
|
||||
*/
|
||||
#define MaxHeapTuplesPerPage \
|
||||
((int) ((BLCKSZ - offsetof(PageHeaderData, pd_linp)) / \
|
||||
(MAXALIGN(offsetof(HeapTupleHeaderData, t_bits)) + sizeof(ItemIdData))))
|
||||
|
||||
/*
|
||||
* MaxAttrSize is a somewhat arbitrary upper limit on the declared size of
|
||||
* data fields of char(n) and similar types. It need not have anything
|
||||
|
||||
Reference in New Issue
Block a user