• T
    Close un-owned SMgrRelations at transaction end. · ff3f9c8d
    Tom Lane 提交于
    If an SMgrRelation is not "owned" by a relcache entry, don't allow it to
    live past transaction end.  This design allows the same SMgrRelation to be
    used for blind writes of multiple blocks during a transaction, but ensures
    that we don't hold onto such an SMgrRelation indefinitely.  Because an
    SMgrRelation typically corresponds to open file descriptors at the fd.c
    level, leaving it open when there's no corresponding relcache entry can
    mean that we prevent the kernel from reclaiming deleted disk space.
    (While CacheInvalidateSmgr messages usually fix that, there are cases
    where they're not issued, such as DROP DATABASE.  We might want to add
    some more sinval messaging for that, but I'd be inclined to keep this
    type of logic anyway, since allowing VFDs to accumulate indefinitely
    for blind-written relations doesn't seem like a good idea.)
    
    This code replaces a previous attempt towards the same goal that proved
    to be unreliable.  Back-patch to 9.1 where the previous patch was added.
    ff3f9c8d
bgwriter.c 11.8 KB