public inbox for [email protected]
help / color / mirror / Atom feedFrom: SATYANARAYANA NARLAPURAM <[email protected]>
To: Chao Li <[email protected]>
Cc: Richard Guo <[email protected]>
Cc: PostgreSQL Hackers <[email protected]>
Cc: Peter Eisentraut <[email protected]>
Subject: Re: Bug: Rule actions see wrong values for generated columns (NEW.gen reads OLD value)
Date: Mon, 13 Apr 2026 00:27:44 -0700
Message-ID: <CAHg+QDf1Y=dZR8i+q3nnjEt2qeJpDG_pvrWtozXTrdu3J8H-FQ@mail.gmail.com> (raw)
In-Reply-To: <[email protected]>
References: <CAHg+QDexGTmCZzx=73gXkY2ZADS6LRhpnU+-8Y_QmrdTS6yUhA@mail.gmail.com>
<CAMbWs4-SJ6B26ciFu_K_2M1ObDA=GirV87N1BKeAtSRmQGATUA@mail.gmail.com>
<[email protected]>
Hi Chao,
On Mon, Apr 13, 2026 at 12:21 AM Chao Li <[email protected]> wrote:
>
>
> > On Apr 13, 2026, at 10:35, Richard Guo <[email protected]> wrote:
> >
> > On Mon, Apr 13, 2026 at 10:59 AM SATYANARAYANA NARLAPURAM
> > <[email protected]> wrote:
> >> NEW.<generated_coulmn> is resolved to the OLD row's value
> >> for update or NULL for insert cases in a DO ALSO rule action for
> >> generated columns. This bug affects both stored and virtual
> >> generated columns. Reporting here to see if this is a known issue
> >> with generated columns.
> >
> > I didn't find related item in open items. This does not seem to be a
> > known issue. I think we should fix it anyway.
> >
> > cc-ing Peter.
> >
> > - Richard
> >
>
> Hi Richard and Satya,
>
> I reproduced the bug following Satya’s procedure and spent some time
> debugging it.
>
> I think the issue is that rewriteTargetListIU() removes generated columns
> from the target list, as described by this comment:
> ```
> if (att_tup->attgenerated)
> {
> /*
> * virtual generated column stores a null value; stored
> generated
> * column will be fixed in executor
> */
> new_tle = NULL;
> }
> ```
>
> Later, when the rule action is rewritten, ReplaceVarsFromTargetList()
> cannot find a target list entry for NEW.gen. For UPDATE rules, the missing
> NEW column is handled with REPLACEVARS_CHANGE_VARNO, so it falls back to
> referencing the original target relation row, which gives the old value.
>
> One possible fix is to build a new target list that adds generated columns
> back when there are rules to fire. I tried the solution locally with some
> quick and dirty code and it seems to fix both stored and virtual generated
> columns for me.
>
> Do either of you plan to propose a patch for this? If so, please go ahead
> and I can review it. Otherwise, I can propose a patch in a couple of days.
I have a patch with me, let me post it shortly.
Thanks,
Satya
view thread (16+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected], [email protected], [email protected], [email protected]
Subject: Re: Bug: Rule actions see wrong values for generated columns (NEW.gen reads OLD value)
In-Reply-To: <CAHg+QDf1Y=dZR8i+q3nnjEt2qeJpDG_pvrWtozXTrdu3J8H-FQ@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox