aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2023-03-31 10:08:40 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2023-03-31 10:08:40 -0400
commit6f7ca625b9d3f6298a3e1ecd0187d123c25316a4 (patch)
tree59c856df8d3f129fc849f9245d848c2bae92d61d
parentdf567fbf6e41aa6b574ead3803c304af55645501 (diff)
downloadpostgresql-6f7ca625b9d3f6298a3e1ecd0187d123c25316a4.tar.gz
postgresql-6f7ca625b9d3f6298a3e1ecd0187d123c25316a4.zip
Ensure acquire_inherited_sample_rows sets its output parameters.
The totalrows/totaldeadrows outputs were left uninitialized in cases where we find no analyzable child tables of a partitioned table. This could lead to setting the partitioned table's pg_class.reltuples value to garbage. It's not clear that that would have any very bad effects in practice, but fix it anyway because it's making valgrind unhappy. Reported and diagnosed by Alexander Lakhin (bug #17880). Discussion: https://postgr.es/m/17880-9282037c923d856e@postgresql.org
-rw-r--r--src/backend/commands/analyze.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c
index 74888702fb9..9c160c1ff5f 100644
--- a/src/backend/commands/analyze.c
+++ b/src/backend/commands/analyze.c
@@ -1391,6 +1391,10 @@ acquire_inherited_sample_rows(Relation onerel, int elevel,
ListCell *lc;
bool has_child;
+ /* Initialize output parameters to zero now, in case we exit early */
+ *totalrows = 0;
+ *totaldeadrows = 0;
+
/*
* Find all members of inheritance set. We only need AccessShareLock on
* the children.
@@ -1524,8 +1528,6 @@ acquire_inherited_sample_rows(Relation onerel, int elevel,
pgstat_progress_update_param(PROGRESS_ANALYZE_CHILD_TABLES_TOTAL,
nrels);
numrows = 0;
- *totalrows = 0;
- *totaldeadrows = 0;
for (i = 0; i < nrels; i++)
{
Relation childrel = rels[i];