Re: Virtual generated columns

From: jian he <jian(dot)universality(at)gmail(dot)com>
To: Richard Guo <guofenglinux(at)gmail(dot)com>
Cc: Alexander Lakhin <exclusion(at)gmail(dot)com>, Peter Eisentraut <peter(at)eisentraut(dot)org>, Dean Rasheed <dean(dot)a(dot)rasheed(at)gmail(dot)com>, Zhang Mingli <zmlpostgres(at)gmail(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Virtual generated columns
Date: 2025-06-02 05:30:58
Message-ID: CACJufxEVXKDWyxf-kAtodvOXrTA68O8kC5op0v4Rcpf8ORoPeQ@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, May 29, 2025 at 11:06 AM Richard Guo <guofenglinux(at)gmail(dot)com> wrote:
>
> On Fri, May 16, 2025 at 5:35 PM jian he <jian(dot)universality(at)gmail(dot)com> wrote:
> > we have used the USING expression in ATPrepAlterColumnType,
> > ATColumnChangeRequiresRewrite.
> > expanding it on ATPrepAlterColumnType seems to make more sense?
> >
> > @@ -14467,7 +14467,7 @@ ATPrepAlterColumnType(List **wqueue,
> > */
> > newval = (NewColumnValue *) palloc0(sizeof(NewColumnValue));
> > newval->attnum = attnum;
> > - newval->expr = (Expr *) transform;
> > + newval->expr = (Expr *)
> > expand_generated_columns_in_expr(transform, rel, 1);
> > newval->is_generated = false;
>
> Yeah, ATPrepAlterColumnType does seem like a better place. But we
> need to ensure that ATColumnChangeRequiresRewrite sees the expanded
> version of the expression — your proposed change fails to do that.
>
> Additionally, I think we also need to ensure that the virtual
> generated columns are expanded before the expression is fed through
> expression_planner, to ensure it can be successfully transformed into
> an executable form.
>
> Hence, the attached patch.

looks good to me.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Eisentraut 2025-06-02 05:42:07 Re: Add “FOR UPDATE NOWAIT” lock details to the log.
Previous Message Amit Kapila 2025-06-02 05:25:09 Re: Fix slot synchronization with two_phase decoding enabled