Hello,
Thank you for reviewing.
> > > + */
> > > + if (IsAutoVacuumWorkerProcess() &&
> > > + rel->rd_rel->relispartition &&
> > > + !(rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE))
> >
> > I'm not sure I understand why we do this only on autovac. Why not all
> > analyzes?
>
> +1. If there is a reason, it should at least be documented in the
> comment above.
>
When we analyze partitioned table by ANALYZE command,
all inheritors including partitioned table are analyzed
at the same time. In this case, if we call pgstat_report_partanalyze,
partitioned table's changes_since_analyze is updated
according to the number of analyzed tuples of partitions
as follows. But I think it should be 0.
\d+ p
Partitioned table "public.p"
Column | Type | Collation | Nullable | Default | Storage | Stats
target | Description
--------+---------+-----------+----------+---------+---------+--------------+-------------
i | integer | | | | plain | |
Partition key: RANGE (i)
Partitions: p_1 FOR VALUES FROM (0) TO (100),
p_2 FOR VALUES FROM (100) TO (200)
insert into p select * from generate_series(0,199);
INSERT 0 200
(before analyze)
-[ RECORD 1 ]-------+------------------
relname | p
n_mod_since_analyze | 0
-[ RECORD 2 ]-------+------------------
relname | p_1
n_mod_since_analyze | 100
-[ RECORD 3 ]-------+------------------
relname | p_2
n_mod_since_analyze | 100
(after analyze)
-[ RECORD 1 ]-------+------------------
relname | p
n_mod_since_analyze | 200
-[ RECORD 2 ]-------+------------------
relname | p_1
n_mod_since_analyze | 0
-[ RECORD 3 ]-------+------------------
relname | p_2
n_mod_since_analyze | 0
I think if we analyze partition tree in order from leaf partitions
to root table, this problem can be fixed.
What do you think about it?
--
Best regards,
Yuzuko Hosoya
NTT Open Source Software Center