Re: disallow alter individual column if partition key contains wholerow reference - Mailing list pgsql-hackers

From jian he
Subject Re: disallow alter individual column if partition key contains wholerow reference
Date
Msg-id CACJufxE_xWFJKpspCebdT17htqdTKnGDnBWiEfFHD7uqh2X7-g@mail.gmail.com
Whole thread Raw
In response to Re: disallow alter individual column if partition key contains wholerow reference  (Chao Li <li.evan.chao@gmail.com>)
List pgsql-hackers
On Mon, Aug 25, 2025 at 11:58 AM Chao Li <li.evan.chao@gmail.com> wrote:
>
> I tested this patch with “partition by range”, it works for me.
>
> Just have a few small comments:
>
> +                       if (bms_is_member(0 - FirstLowInvalidHeapAttributeNumber, expr_attrs))
>
> Can we simply check “if (Var *)expr->varno == 1 && (Var *) expr->varattno == 0”, which seems more direct?
>
hi.

in has_partition_attrs, we have:
if (partattno != 0)
{
}
else
{
            /* Arbitrary expression */
            Node       *expr = (Node *) lfirst(partexprs_item);
            Bitmapset  *expr_attrs = NULL;
            /* Find all attributes referenced */
            pull_varattnos(expr, 1, &expr_attrs);
}

see comments "   /* Arbitrary expression */"
after pull_varattnos, we can not assume "expr" is a Var node?


> +                       /*
> +                        * If partition expression contains wholerow reference, then any
> +                        * column is indirect part of the expression now.  unconditionally
> +                        * set used_in_expr to true.
> +                       */
>
> For the comment, a tiny enhancement:
>
> /*
>  * If the partition expression contains a whole-row reference, then every
>  * column is implicitly part of the expression. Set used_in_expr to true
>  * unconditionally.
>  */
>
Thanks, your comments are better than mine.



pgsql-hackers by date:

Previous
From: Chao Li
Date:
Subject: Re: Fixes a trivial bug in dumped parse/query/plan trees
Next
From: "Zhijie Hou (Fujitsu)"
Date:
Subject: RE: Conflict detection for update_deleted in logical replication