postgres.git / summary / log / commit / refs

commit    80c79ab2a8d63bc6c83269b29c1ba993c8077d3a
Author:   Robert Haas <rhaas@postgresql.org>
Date:     Thu Jul 25 20:16:42 2013 +0000
First released in: 9.4.0

    pgstattuple: Use SnapshotDirty, not SnapshotNow.
    
    Tuples belonging to uncommitted transactions should not be
    counted as dead.
    
    This is arguably a bug fix that should be back-patched, but
    as no one ever noticed until it came time to try to get rid
    of SnapshotNow, I'm only doing this in master for now.


contrib/pgstattuple/pgstattuple.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contrib/pgstattuple/pgstattuple.c b/contrib/pgstattuple/pgstattuple.c index 7f41ec3ad98..f9ba0a6c21b 100644 --- a/contrib/pgstattuple/pgstattuple.c +++ b/contrib/pgstattuple/pgstattuple.c @@ -278,9 +278,11 @@ pgstat_heap(Relation rel, FunctionCallInfo fcinfo) Buffer buffer; pgstattuple_type stat = {0}; BufferAccessStrategy bstrategy; + SnapshotData SnapshotDirty; /* Disable syncscan because we assume we scan from block zero upwards */ scan = heap_beginscan_strat(rel, SnapshotAny, 0, NULL, true, false); + InitDirtySnapshot(SnapshotDirty); nblocks = scan->rs_nblocks; /* # blocks to be scanned */ @@ -296,7 +298,7 @@ pgstat_heap(Relation rel, FunctionCallInfo fcinfo) /* must hold a buffer lock to call HeapTupleSatisfiesVisibility */ LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE); - if (HeapTupleSatisfiesVisibility(tuple, SnapshotNow, scan->rs_cbuf)) + if (HeapTupleSatisfiesVisibility(tuple, &SnapshotDirty, scan->rs_cbuf)) { stat.tuple_len += tuple->t_len; stat.tuple_count++; [parent: 3483f4332de7]