]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Repair problems with hash indexes that span multiple segments: the hash code's
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 19 Nov 2006 21:33:46 +0000 (21:33 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 19 Nov 2006 21:33:46 +0000 (21:33 +0000)
commitddefff72470b4fe22cf33f8a495a306727be072c
treefc523c4672897045ff5b9f3c4b2a18dbe0e13ea2
parent5ae883f52b8d71d528691abc4bf8a02b2f5b8832
Repair problems with hash indexes that span multiple segments: the hash code's
preference for filling pages out-of-order tends to confuse the sanity checks
in md.c, as per report from Balazs Nagy in bug #2737.  The fix is to ensure
that the smgr-level code always has the same idea of the logical EOF as the
hash index code does, by using ReadBuffer(P_NEW) where we are adding a single
page to the end of the index, and using smgrextend() to reserve a large batch
of pages when creating a new splitpoint.  The patch is a bit ugly because it
avoids making any changes in md.c, which seems the most prudent approach for a
backpatchable beta-period fix.  After 8.3 development opens, I'll take a look
at a cleaner but more invasive patch, in particular getting rid of the now
unnecessary hack to allow reading beyond EOF in mdread().

Backpatch as far as 7.4.  The bug likely exists in 7.3 as well, but because
of the magnitude of the 7.3-to-7.4 changes in hash, the later-version patch
doesn't even begin to apply.  Given the other known bugs in the 7.3-era hash
code, it does not seem worth trying to develop a separate patch for 7.3.
src/backend/access/hash/hashovfl.c
src/backend/access/hash/hashpage.c