• Tom Lane's avatar
    Repair problems with hash indexes that span multiple segments: the hash code's · d68efb3f
    Tom Lane authored
    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.
    d68efb3f
hashpage.c 24.9 KB