pgsql: Revert the GinMaxItemSize calculation so that we fit 3 tuples pe

From: Heikki Linnakangas <heikki(dot)linnakangas(at)iki(dot)fi>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Revert the GinMaxItemSize calculation so that we fit 3 tuples pe
Date: 2014-12-30 13:20:08
Message-ID: E1Y5wiW-0004RV-Ft@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Revert the GinMaxItemSize calculation so that we fit 3 tuples per page.

Commit 36a35c55 changed the divisor from 3 to 6, for no apparent reason.
Reducing GinMaxItemSize like that created a dump/reload hazard: loading a
9.3 database to 9.4 might fail with "index row size XXX exceeds maximum 1352
for index ..." error. Revert the change.

While we're at it, make the calculation slightly more accurate. It used to
divide the available space on page by three, then subtract
sizeof(ItemIdData), and finally round down. That's not totally accurate; the
item pointers for the three items are packed tight right after the page
header, but there is alignment padding after the item pointers. Change the
calculation to reflect that, like BTMaxItemSize does. I tested this with
different block sizes on systems with 4- and 8-byte alignment, and the value
after the final MAXALIGN_DOWN was the same with both methods on all
configurations. So this does not make any difference currently, but let's be
tidy.

Also add a comment explaining what the macro does.

This fixes bug #12292 reported by Robert Thaler. Backpatch to 9.4, where the
bug was introduced.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/930fd68455576dada48521a6cef642caddea3c63

Modified Files
--------------
src/include/access/gin_private.h | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Alvaro Herrera 2014-12-30 16:58:01 pgsql: Use TypeName to represent type names in certain commands
Previous Message Tatsuo Ishii 2014-12-30 11:37:58 pgsql: Fix resource leak pointed out by Coverity.