bug when apply fast default mechanism for adding new column over domain with default value
jian he <jian.universality@gmail.com>
From: jian he <jian.universality@gmail.com>
To: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2025-03-01T05:39:56Z
Lists: pgsql-hackers
hi. While looking at ATExecAddColumn, I saw there are two DomainHasConstraints, which are cache unfriendly, then I think I found a bug for applying fast default over domain with default value. bug demo: create domain int_domain3 as int check(value > 1) default 11; create domain int_domain4 as int default 11; drop table if exists t0; create table t0(a int); insert into t0 values(1),(2); alter table t0 add column b int_domain3; select * from t0; a | b ---+---- 1 | 11 2 | 11 (2 rows) alter table t0 add column c int_domain4; select * from t0; a | b | c ---+----+--- 1 | 11 | 2 | 11 | (2 rows) I expect column "c" value also be value 11. column b type is domain int_domain3, which has a constraint. As a result, adding column b triggers a table rewrite, ensuring the domain default value is successfully applied. column c is domain int_domain4, which has no constraint. This allows for a fast default mechanism applied to column c, but we cannot. StoreAttrDefault, pg_attrdef can not cope with domain with default expression. also domain default expression is stored at pg_tye.typdefaultbin. Attach a patch to fix this issue by cause it to table rewrite. also minor refactor to avoid double DomainHasConstraints function call.
Commits
-
Need to do CommandCounterIncrement after StoreAttrMissingVal.
- dd34cbfce296 13.21 landed
- d31d39cfe4f5 14.18 landed
- bd178960c69b 18.0 landed
- 2d6cfb0cddd3 15.13 landed
- 0941aadcd55b 17.5 landed
- 053222a97b13 16.9 landed
-
Simplify some logic around setting pg_attribute.atthasdef.
- 35c8dd9e1176 18.0 landed
-
Remove now-dead code in StoreAttrDefault().
- 4528768d98f8 18.0 landed
-
Fix broken handling of domains in atthasmissing logic.
- 95f650674d2c 18.0 landed
- edc3bccd0dc7 16.9 landed
- d6dd2a02bae0 17.5 landed
- c75c830e2392 14.18 landed
- aac07b56256e 13.21 landed
- 1d180931cc3b 15.13 landed