Re: pointless check in RelationBuildPartitionDesc

Amit Langote <langote_amit_f8@lab.ntt.co.jp>

From: Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>, Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2018-09-04T00:47:07Z
Lists: pgsql-hackers
On 2018/09/04 6:39, Alvaro Herrera wrote:
> I noticed this strange hack in RelationBuildPartitionDesc:
> 
>        /*
>         * It is possible that the pg_class tuple of a partition has not been
>         * updated yet to set its relpartbound field.  The only case where
>         * this happens is when we open the parent relation to check using its
>         * partition descriptor that a new partition's bound does not overlap
>         * some existing partition.
>         */
>        if (!((Form_pg_class) GETSTRUCT(tuple))->relispartition)
>        {
>            ReleaseSysCache(tuple);
>            continue;
>        }
> 
> After looking, it seems that this is just self-inflicted pain: for some
> reason, we store the pg_inherits row for a partition, and immediately
> afterwards compute and store its partition bound, which requires the
> above hack.  But if we do things in the opposite order, this is no
> longer needed.  I propose to remove it, as in the attached patch.

+1.  I remember having facepalmed at this before and had also written a
patch but never got around to submitting it.

Thanks,
Amit



Commits

  1. Simplify partitioned table creation vs. relcache