• Heikki Linnakangas's avatar
    Move the PredicateLockRelation() call from nodeSeqscan.c to heapam.c. It's · cd70dd6b
    Heikki Linnakangas authored
    more consistent that way, since all the other PredicateLock* calls are
    made in various heapam.c and index AM functions. The call in nodeSeqscan.c
    was unnecessarily aggressive anyway, there's no need to try to lock the
    relation every time a tuple is fetched, it's enough to do it once.
    
    This has the user-visible effect that if a seq scan is initialized in the
    executor, but never executed, we now acquire the predicate lock on the heap
    relation anyway. We could avoid that by taking the lock on the first
    heap_getnext() call instead, but it doesn't seem worth the trouble given
    that it feels more natural to do it in heap_beginscan().
    
    Also, remove the retail PredicateLockTuple() calls from heap_getnext(). In
    a seqscan, started with heap_begin(), we're holding a whole-relation
    predicate lock on the heap so there's no need to lock the tuples
    individually.
    
    Kevin Grittner and me
    cd70dd6b
relscan.h 3.78 KB