> On Jun 9, 2026, at 15:28, Chao Li <[email protected]> wrote:
>
>
>
>> On Jun 9, 2026, at 15:23, jian he <[email protected]> wrote:
>>
>> On Tue, Jun 9, 2026 at 2:23 PM Chao Li <[email protected]> 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
>
> Thanks for pointing out that. I will review 6755.
>
> Best regards,
> --
> Chao Li (Evan)
> HighGo Software Co., Ltd.
> https://www.highgo.com/
>
After reading the other implementation in [1], I realized that I had missed the
partial-index case, so I added coverage for that.
I am still sending an updated version of this patch because my implementation
is different from the one in [1]. I would like people to compare the two
approaches and decide which direction is better.
[1]
https://postgr.es/m/cajtyswxokyedvbzymwc9skrq7y_muv6xjxn4h9gfsbopd3n...@mail.gmail.com
Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/