]> granicus.if.org Git - postgresql/commitdiff
pgstattuple: Use SnapshotDirty, not SnapshotNow.
authorRobert Haas <rhaas@postgresql.org>
Thu, 25 Jul 2013 20:16:42 +0000 (16:16 -0400)
committerRobert Haas <rhaas@postgresql.org>
Thu, 25 Jul 2013 20:21:13 +0000 (16:21 -0400)
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

index 7f41ec3ad98c7fc5540268c4951ccc04ff516aed..f9ba0a6c21b2ab59646982ac4783b4b7f010255d 100644 (file)
@@ -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++;