public inbox for [email protected]  
help / color / mirror / Atom feed
From: Chao Li <[email protected]>
To: jian he <[email protected]>
Cc: Postgres hackers <[email protected]>
Cc: Peter Eisentraut <[email protected]>
Subject: Re: Fix SET EXPRESSION for virtual columns with whole-row dependencies
Date: Wed, 10 Jun 2026 17:05:30 +0800
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
	<CACJufxHTK0Qk7AwdrHK=y8OtK--zEVY-Ossxx4UUgxaE2NCAXA@mail.gmail.com>
	<[email protected]>



> 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_MUv6XJXN4H9GfsBOPd3NJ+w@mail.gmail.com

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/









view thread (9+ 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]
  Subject: Re: Fix SET EXPRESSION for virtual columns with whole-row dependencies
  In-Reply-To: <[email protected]>

* 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