Thread: pgsql: Improve the IndexVacuumInfo/IndexBulkDeleteResult API to allow
pgsql: Improve the IndexVacuumInfo/IndexBulkDeleteResult API to allow
From
tgl@postgresql.org (Tom Lane)
Date:
Log Message: ----------- 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. Modified Files: -------------- pgsql/src/backend/access/gin: ginvacuum.c (r1.28 -> r1.29) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gin/ginvacuum.c?r1=1.28&r2=1.29) pgsql/src/backend/access/gist: gistvacuum.c (r1.43 -> r1.44) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/gist/gistvacuum.c?r1=1.43&r2=1.44) pgsql/src/backend/access/hash: hash.c (r1.110 -> r1.111) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/hash/hash.c?r1=1.110&r2=1.111) pgsql/src/backend/access/nbtree: nbtree.c (r1.169 -> r1.170) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/nbtree/nbtree.c?r1=1.169&r2=1.170) pgsql/src/backend/catalog: index.c (r1.316 -> r1.317) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/index.c?r1=1.316&r2=1.317) pgsql/src/backend/commands: analyze.c (r1.137 -> r1.138) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/analyze.c?r1=1.137&r2=1.138) vacuum.c (r1.387 -> r1.388) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/vacuum.c?r1=1.387&r2=1.388) vacuumlazy.c (r1.119 -> r1.120) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/vacuumlazy.c?r1=1.119&r2=1.120) pgsql/src/backend/postmaster: pgstat.c (r1.187 -> r1.188) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/postmaster/pgstat.c?r1=1.187&r2=1.188) pgsql/src/include/access: genam.h (r1.76 -> r1.77) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/access/genam.h?r1=1.76&r2=1.77)