mirror of
https://github.com/postgres/postgres.git
synced 2025-08-28 18:48:04 +03:00
Don't lose partitioned table reltuples=0 after relhassubclass=f.
ANALYZE sets relhassubclass=f when a partitioned table no longer has
partitions. An ANALYZE doing that proceeded to apply the inplace update
of pg_class.reltuples to the old pg_class tuple instead of the new
tuple, losing that reltuples=0 change if the ANALYZE committed.
Non-partitioning inheritance trees were unaffected. Back-patch to v14,
where commit 375aed36ad
introduced
maintenance of partitioned table pg_class.reltuples.
Reported by Alexander Lakhin.
Discussion: https://postgr.es/m/a295b499-dcab-6a99-c06e-01cf60593344@gmail.com
This commit is contained in:
@@ -637,7 +637,11 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
|
||||
|
||||
visibilitymap_count(onerel, &relallvisible, NULL);
|
||||
|
||||
/* Update pg_class for table relation */
|
||||
/*
|
||||
* Update pg_class for table relation. CCI first, in case acquirefunc
|
||||
* updated pg_class.
|
||||
*/
|
||||
CommandCounterIncrement();
|
||||
vac_update_relstats(onerel,
|
||||
relpages,
|
||||
totalrows,
|
||||
@@ -672,6 +676,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
|
||||
* Partitioned tables don't have storage, so we don't set any fields
|
||||
* in their pg_class entries except for reltuples and relhasindex.
|
||||
*/
|
||||
CommandCounterIncrement();
|
||||
vac_update_relstats(onerel, -1, totalrows,
|
||||
0, hasindex, InvalidTransactionId,
|
||||
InvalidMultiXactId,
|
||||
|
Reference in New Issue
Block a user