Improve the IndexVacuumInfo/IndexBulkDeleteResult API to allow somewhat sane
commit158126e913ffa432cf0ac22169dbb0a6a80565ce
authortgl <tgl>
Sat, 6 Jun 2009 22:13:52 +0000 (6 22:13 +0000)
committertgl <tgl>
Sat, 6 Jun 2009 22:13:52 +0000 (6 22:13 +0000)
tree2322d624f2e770eb867800bb7c1fd1f77e2921ab
parent7d8ee9b7ce9b8c26628561c751b731dd900465b7
Improve the IndexVacuumInfo/IndexBulkDeleteResult API to allow somewhat sane
behavior in cases where we don't know the heap tuple count accurately; in
particular partial vacuum, but this also makes the API a bit more useful
for ANALYZE.  This patch adds "estimated_count" flags to both structs so
that an approximate count can be flagged as such, and adjusts the logic
so that approximate counts are not used for updating pg_class.reltuples.

This fixes my previous complaint that VACUUM was putting ridiculous values
into pg_class.reltuples for indexes.  The actual impact of that bug is
limited, because the planner only pays attention to reltuples for an index
if the index is partial; which probably explains why beta testers hadn't
noticed a degradation in plan quality from it.  But it needs to be fixed.

The whole thing is a bit messy and should be redesigned in future, because
reltuples now has the potential to drift quite far away from reality when
a long period elapses with no non-partial vacuums.  But this is as good as
it's going to get for 8.4.
src/backend/access/gin/ginvacuum.c
src/backend/access/gist/gistvacuum.c
src/backend/access/hash/hash.c
src/backend/access/nbtree/nbtree.c
src/backend/catalog/index.c
src/backend/commands/analyze.c
src/backend/commands/vacuum.c
src/backend/commands/vacuumlazy.c
src/backend/postmaster/pgstat.c
src/include/access/genam.h