Re: BUG #19393: pg_upgrade fails with duplicate key violation when CHECK constraint named *_not_null exists

Hüseyin Demir <huseyin.d3r@gmail.com>

From: Hüseyin Demir <huseyin.d3r@gmail.com>
To: Laurenz Albe <laurenz.albe@cybertec.at>
Cc: pgsql-bugs@lists.postgresql.org
Date: 2026-02-09T17:16:26Z
Lists: pgsql-bugs, pgsql-hackers
Hi,

> I would prefer not to, but I don't have a strong opinion about it.
> Which name PostgreSQL chooses for the generated NOT NULL constraint
> is not important, as long as it doesn't conflict with the existing name.

I also agree that it solves the problem in 18 which I already tested.
Thanks again for your help.


Laurenz Albe <laurenz.albe@cybertec.at>, 9 Şub 2026 Pzt, 12:01 tarihinde
şunu yazdı:

> On Mon, 2026-02-09 at 07:24 +0100, Hüseyin Demir wrote:
> > Thanks for the patch and LGTM for PostgreSQL 18.
>
> Thanks for checking!
>
> > I tried to create following table on PG18
> >
> > benchmark=# CREATE TABLE two_not_null_constraints (
> >      col integer NOT NULL,
> >      CONSTRAINT two_not_null_constraints_col_not_null CHECK (col IS NOT
> NULL)
> >   );
> > ERROR:  duplicate key value violates unique constraint
> "pg_constraint_conrelid_contypid_conname_index"
> > DETAIL:  Key (conrelid, contypid, conname)=(16385, 0,
> two_not_null_constraints_col_not_null) already exists.
> >
> > In PG17 I was able to create the table.
>
> Yes, because what causes your problemm is a new feature in v18.
>
> > One question during the tests should we confirm the output of
> pg_constraint table ?
> > It would make sense during the tests but the current test is also good
> to proceed.
>
>
>
> Yours,
> Laurenz Albe
>

Commits

  1. Update .abi-compliance-history for AddRelationNotNullConstraints().

  2. Avoid name collision with NOT NULL constraints