postgres=# alter table test_null_20251210 add constraint xyzxyz not null c1; ALTER TABLE <<<--- above alter table statement should report 'not null constraint exists', <<<---- Maybe this problem is a bug ? postgres=# \d+ test_null_20251210 数据表 "public.test_null_20251210" 栏位 | 类型 | 校对规则 | 可空的 | 预设 | 存储 | 压缩 | 统计目标 | 描述 ------+---------+----------+----------+------+----------+------+----------+------ c1 | integer | | not null | | plain | | | c2 | text | | | | extended | | | Not-null constraints: "test_null_20251210_c1_not_null" NOT NULL "c1" 访问方法 heap
postgres=# select version(); version ----------------------------------------------------------------------------------- PostgreSQL 18.1 on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 7.3.0, 64-bit (1 行记录)
postgres=#
It's an expected behavior; you can check here [0], but i am curious ,why it's not treated as normal constraint and why we are not throwing an error like the constraint already exists?