| From: | jian he <jian(dot)universality(at)gmail(dot)com> |
|---|---|
| To: | Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com> |
| Cc: | Postgres hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Peter Eisentraut <peter(at)eisentraut(dot)org> |
| Subject: | Re: Fix SET EXPRESSION for virtual columns with whole-row dependencies |
| Date: | 2026-06-09 07:23:24 |
| Message-ID: | CACJufxHTK0Qk7AwdrHK=y8OtK--zEVY-Ossxx4UUgxaE2NCAXA@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Tue, Jun 9, 2026 at 2:23 PM Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com> wrote:
>
> Hi,
>
> While testing “[f80bedd52] Allow ALTER COLUMN SET EXPRESSION on virtual columns”, I found that the feature missed handling whole-row check constraints.
>
> Here is a repro:
> ```
> evantest=# create table t(
> evantest(# a int,
> evantest(# b int generated always as (a*2) virtual,
> evantest(# constraint row_c check (t is not null)
> evantest(# );
> CREATE TABLE
> evantest=# insert into t(a) values(1);
> INSERT 0 1
> evantest=# alter table t alter b set expression as (nullif(a, 1));
> ALTER TABLE
> evantest=# select * from t;
> a | b
> ---+---
> 1 |
> (1 row)
> ```
>
> The ALTER TABLE should fail, because it makes b become NULL, which breaks the constraint row_c.
>
Hi.
In case you are wondering whole-row objects:
ALTER TABLE DROP COLUMN and ALTER COLUMN SET DATA TYPE are covered by
https://commitfest.postgresql.org/patch/5988 and
https://commitfest.postgresql.org/patch/6055.
Meanwhile, ALTER TABLE SET EXPRESSION is being handled over in
https://commitfest.postgresql.org/patch/6755
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Chao Li | 2026-06-09 07:28:18 | Re: Fix SET EXPRESSION for virtual columns with whole-row dependencies |
| Previous Message | Michael Paquier | 2026-06-09 07:10:55 | Re: Fix missing semicolon in pl_gram.y for option_value rule |