• T
    Clean up smgr.c/md.c APIs as per discussion a couple months ago. Instead of · ef072219
    Tom Lane 提交于
    having md.c return a success/failure boolean to smgr.c, which was just going
    to elog anyway, let md.c issue the elog messages itself.  This allows better
    error reporting, particularly in cases such as "short read" or "short write"
    which Peter was complaining of.  Also, remove the kluge of allowing mdread()
    to return zeroes from a read-beyond-EOF: this is now an error condition
    except when InRecovery or zero_damaged_pages = true.  (Hash indexes used to
    require that behavior, but no more.)  Also, enforce that mdwrite() is to be
    used for rewriting existing blocks while mdextend() is to be used for
    extending the relation EOF.  This restriction lets us get rid of the old
    ad-hoc defense against creating huge files by an accidental reference to
    a bogus block number: we'll only create new segments in mdextend() not
    mdwrite() or mdread().  (Again, when InRecovery we allow it anyway, since
    we need to allow updates of blocks that were later truncated away.)
    Also, clean up the original makeshift patch for bug #2737: move the
    responsibility for padding relation segments to full length into md.c.
    ef072219
tablecmds.c 202.3 KB