mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
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.
This commit is contained in:
parent
3483f4332d
commit
80c79ab2a8
@ -278,9 +278,11 @@ pgstat_heap(Relation rel, FunctionCallInfo fcinfo)
|
|||||||
Buffer buffer;
|
Buffer buffer;
|
||||||
pgstattuple_type stat = {0};
|
pgstattuple_type stat = {0};
|
||||||
BufferAccessStrategy bstrategy;
|
BufferAccessStrategy bstrategy;
|
||||||
|
SnapshotData SnapshotDirty;
|
||||||
|
|
||||||
/* Disable syncscan because we assume we scan from block zero upwards */
|
/* Disable syncscan because we assume we scan from block zero upwards */
|
||||||
scan = heap_beginscan_strat(rel, SnapshotAny, 0, NULL, true, false);
|
scan = heap_beginscan_strat(rel, SnapshotAny, 0, NULL, true, false);
|
||||||
|
InitDirtySnapshot(SnapshotDirty);
|
||||||
|
|
||||||
nblocks = scan->rs_nblocks; /* # blocks to be scanned */
|
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 */
|
/* must hold a buffer lock to call HeapTupleSatisfiesVisibility */
|
||||||
LockBuffer(scan->rs_cbuf, BUFFER_LOCK_SHARE);
|
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_len += tuple->t_len;
|
||||||
stat.tuple_count++;
|
stat.tuple_count++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user