On 2026-Mar-02, Chao Li wrote:

> But when I played with the patch, I saw a problem. In the test script, we can 
> see:
> ```
> alter domain connotnull add constraint constr1 not null;
> alter domain connotnull add constraint constr1 not null; — redundant
> ```
> 
> If we first create a named constraint “constr1” then create an unnamed one, 
> that’s fine, the unnamed is considered as redundant. However, if I do the 
> reverse order, add a unnamed first, then “constr1”, it failed:
> ```
> evantest=# create domain connotnull integer;
> CREATE DOMAIN
> evantest=# alter domain connotnull add not null;
> ALTER DOMAIN
> evantest=# alter domain connotnull add constraint constr1 not null;
> ERROR:  cannot create not-null constraint "constr1" for domain "connotnull"
> DETAIL:  A not-null constraint named "connotnull_not_null" already exists for 
> domain "connotnull".
> ```
> 
> Is that an expected behavior?

Yes.  A column or domain can only have one not-null constraint, and the
default name is not going to match "constr1", so if you request constr1
first, then that's okay because the second unnamed one matches the
constraint; but if you request the unnamed first it'll get the default
name and when you next request "constr1", that won't match the name that
was defaulted.

-- 
Álvaro Herrera         PostgreSQL Developer  —  https://www.EnterpriseDB.com/
"La espina, desde que nace, ya pincha" (Proverbio africano)


Reply via email to