aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2022-04-06 23:35:56 -0700
committerAndres Freund <andres@anarazel.de>2022-04-06 23:35:56 -0700
commit5e07d3d6bdbff998eb68c131ecd10c448b026e47 (patch)
treedd5f0831c35b060c5bfd75c5ac38ade1e69300f4
parent81ae9e65887476b4c55aaad276a8010a459a41ce (diff)
downloadpostgresql-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.c9
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);