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
