From: Andres Freund Date: Thu, 7 Apr 2022 06:35:56 +0000 (-0700) Subject: pgstat: fix small bug in pgstat_drop_relation(). X-Git-Tag: REL_15_BETA1~263 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5e07d3d6bdbff998eb68c131ecd10c448b026e47;p=thirdparty%2Fpostgresql.git pgstat: fix small bug in pgstat_drop_relation(). Just after committing 5891c7a8ed8, a test running with debug_discard_caches=1 failed locally... pgstat_drop_relation() neither checked pgstat_should_count_relation() nor called pgstat_prep_relation_pending(). With debug_discard_caches=1 rel->pgstat_info wasn't set up, leading pg_stat_get_xact_tuples_inserted() spuriously still returning > 0 while in the transaction dropping the table. --- diff --git a/src/backend/utils/activity/pgstat_relation.c b/src/backend/utils/activity/pgstat_relation.c index bec190c5897..a846d9ffb65 100644 --- a/src/backend/utils/activity/pgstat_relation.c +++ b/src/backend/utils/activity/pgstat_relation.c @@ -180,18 +180,21 @@ void pgstat_drop_relation(Relation rel) { int nest_level = GetCurrentTransactionNestLevel(); - PgStat_TableStatus *pgstat_info = rel->pgstat_info; + PgStat_TableStatus *pgstat_info; pgstat_drop_transactional(PGSTAT_KIND_RELATION, rel->rd_rel->relisshared ? InvalidOid : MyDatabaseId, RelationGetRelid(rel)); + if (!pgstat_should_count_relation(rel)) + return; + /* * Transactionally set counters to 0. That ensures that accesses to * pg_stat_xact_all_tables inside the transaction show 0. */ - if (pgstat_info && - pgstat_info->trans != NULL && + pgstat_info = rel->pgstat_info; + if (pgstat_info->trans && pgstat_info->trans->nest_level == nest_level) { save_truncdrop_counters(pgstat_info->trans, true);