Fix nbtree cleanup-only VACUUM stats inaccuracies. Logic for counting heap TIDs from posting list tuples (added by commit 0d861bbb) was faulty. It didn't count any TIDs/index tuples in the event of no callback being set. This meant that we incorrectly counted no index tuples in clean-up only VACUUMs, which could lead to pg_class.reltuples being spuriously set to 0 in affected indexes.
To fix, go back to counting items from the page in cases where there is no callback. This approach isn't very accurate, but it works well enough in practice while avoiding the expense of accessing every index tuple during cleanup-only VACUUMs. Author: Peter Geoghegan <[email protected]> Reported-By: Jehan-Guillaume de Rorthais <[email protected]> https://postgr.es/m/20201023174451.69e358f1@firost Backpatch: 13-, where nbtree deduplication was introduced Branch ------ REL_13_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/02c9386ca4f706364904be2720e2d09916e2b619 Modified Files -------------- src/backend/access/nbtree/nbtree.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)
