diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2007-05-27 03:50:39 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2007-05-27 03:50:39 +0000 |
commit | 77947c51c08179b8bc12347a7fbcb2c8d7908302 (patch) | |
tree | 0a306ea177817fdadc0e4421b6d8dd212c11e6e3 /src/backend/utils/cache/relcache.c | |
parent | cadb78330eedceafeda99bf12ac690cda773be62 (diff) | |
download | postgresql-77947c51c08179b8bc12347a7fbcb2c8d7908302.tar.gz postgresql-77947c51c08179b8bc12347a7fbcb2c8d7908302.zip |
Fix up pgstats counting of live and dead tuples to recognize that committed
and aborted transactions have different effects; also teach it not to assume
that prepared transactions are always committed.
Along the way, simplify the pgstats API by tying counting directly to
Relations; I cannot detect any redeeming social value in having stats
pointers in HeapScanDesc and IndexScanDesc structures. And fix a few
corner cases in which counts might be missed because the relation's
pgstat_info pointer hadn't been set.
Diffstat (limited to 'src/backend/utils/cache/relcache.c')
-rw-r--r-- | src/backend/utils/cache/relcache.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 7d554c2ada2..45cb103adee 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.260 2007/05/02 21:08:46 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/cache/relcache.c,v 1.261 2007/05/27 03:50:39 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1802,6 +1802,7 @@ RelationClearRelation(Relation relation, bool rebuild) int old_refcnt = relation->rd_refcnt; SubTransactionId old_createSubid = relation->rd_createSubid; SubTransactionId old_newRelfilenodeSubid = relation->rd_newRelfilenodeSubid; + struct PgStat_TableStatus *old_pgstat_info = relation->pgstat_info; TupleDesc old_att = relation->rd_att; RuleLock *old_rules = relation->rd_rules; MemoryContext old_rulescxt = relation->rd_rulescxt; @@ -1821,6 +1822,7 @@ RelationClearRelation(Relation relation, bool rebuild) relation->rd_refcnt = old_refcnt; relation->rd_createSubid = old_createSubid; relation->rd_newRelfilenodeSubid = old_newRelfilenodeSubid; + relation->pgstat_info = old_pgstat_info; if (equalTupleDescs(old_att, relation->rd_att)) { |