From e46a309bd8b257642ebe406188e79cce22db43f7 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 31 Mar 2023 10:08:40 -0400 Subject: [PATCH] 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 --- src/backend/commands/analyze.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index f47ef379b5c..a7c2528d711 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -1367,6 +1367,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. @@ -1498,8 +1502,6 @@ acquire_inherited_sample_rows(Relation onerel, int elevel, * clear that it's worth working harder.) */ numrows = 0; - *totalrows = 0; - *totaldeadrows = 0; for (i = 0; i < nrels; i++) { Relation childrel = rels[i]; -- 2.39.5