Re: Partitioned index can be not dumped

Zhihong Yu <zyu@yugabyte.com>

From: Zhihong Yu <zyu@yugabyte.com>
To: Álvaro Herrera <alvherre@alvh.no-ip.org>
Cc: Alexander Pyhalov <a.pyhalov@postgrespro.ru>, Pgsql Hackers <pgsql-hackers@postgresql.org>
Date: 2021-06-30T21:56:17Z
Lists: pgsql-hackers
On Wed, Jun 30, 2021 at 2:32 PM Álvaro Herrera <alvherre@alvh.no-ip.org>
wrote:

> On 2021-Jun-30, Zhihong Yu wrote:
>
> > Hi,
> > nit:
> > -       if (hasindex)
> > +       if (nindexes > 0)
> >
> > It seems hasindex is no longer needed since nindexes is checked.
>
> It's still used to call vac_update_relstats().  We want nindexes to be 0
> for partitioned tables, but still pass true when there are indexes.
>
Hi,
In that case, I wonder whether nindexes can be negated following the call
to vac_open_indexes().

        vac_open_indexes(onerel, AccessShareLock, &nindexes, &Irel);
+       nindexes = -nindexes;

That way, hasindex can be dropped.
vac_update_relstats() call would become:

        vac_update_relstats(onerel, -1, totalrows,
-                           0, false, InvalidTransactionId,
+                           0, nindexes != 0, InvalidTransactionId,

My thinking is that without hasindex, the code is easier to maintain.

Thanks


> Please don't forget to trim the text of the email you're replying to.
>
> --
> Álvaro Herrera                        Valdivia, Chile
>                         https://www.EnterpriseDB.com/
>

Commits

  1. Don't reset relhasindex for partitioned tables on ANALYZE

  2. Set pg_class.reltuples for partitioned tables

  3. autovacuum: handle analyze for partitioned tables