diff options
author | Andres Freund <andres@anarazel.de> | 2022-04-06 23:35:56 -0700 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2022-04-06 23:35:56 -0700 |
commit | 5e07d3d6bdbff998eb68c131ecd10c448b026e47 (patch) | |
tree | dd5f0831c35b060c5bfd75c5ac38ade1e69300f4 | |
parent | 81ae9e65887476b4c55aaad276a8010a459a41ce (diff) | |
download | postgresql-5e07d3d6bdbff998eb68c131ecd10c448b026e47.tar.gz postgresql-5e07d3d6bdbff998eb68c131ecd10c448b026e47.zip |
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.
-rw-r--r-- | src/backend/utils/activity/pgstat_relation.c | 9 |
1 files changed, 6 insertions, 3 deletions
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); |