Re: Bug: Rule actions see wrong values for generated columns (NEW.gen reads OLD value)
Richard Guo <guofenglinux@gmail.com>
From: Richard Guo <guofenglinux@gmail.com>
To: Dean Rasheed <dean.a.rasheed@gmail.com>
Cc: Chao Li <li.evan.chao@gmail.com>, SATYANARAYANA NARLAPURAM <satyanarlapuram@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Peter Eisentraut <peter@eisentraut.org>
Date: 2026-04-20T07:29:04Z
Lists: pgsql-hackers
Attachments
- v3-0001-Fix-incorrect-NEW-references-to-generated-columns.patch (application/octet-stream) patch v3-0001
On Mon, Apr 20, 2026 at 2:25 PM Richard Guo <guofenglinux@gmail.com> wrote: > Yeah, this is a better approach. The change looks good to me. > > A nitpick: For the comment "The generated column expressions typically > refer to new.attribute ...", maybe we can remove "typically", as > generation expressions always refer to columns of the same relation. I noticed a couple of issues after a further look. 1. The ReplaceVarsFromTargetList call on "gen_cols" fails to handle hasSubLinks. This can cause error if targetList contains SubLinks: update t set a = (select max(a) from t); ERROR: replace_rte_variables inserted a SubLink, but has noplace to record it 2. The same bug fixed in this patch also exists in rule quals: create table t (a int, b int generated always as (a *2)); insert into t values (1); create rule rule_qual as on update to t where new.b > 100 do instead nothing; update t set a = 100; select * from t; a | b -----+----- 100 | 200 (1 row) I think we should apply the same fix to CopyAndAddInvertedQual. Attached v3 fixes them. - Richard
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix incorrect NEW references to generated columns in rule rewriting
- 8e39951beac7 14.23 landed
- 7062bd577ec9 15.18 landed
- 07b257189ea4 16.14 landed
- 9d6208939a0a 17.10 landed
- e528bfe97190 18.4 landed
- c6a79be3f3c7 19 (unreleased) landed