Re: NOT NULL NOT ENFORCED - Mailing list pgsql-hackers

From jian he
Subject Re: NOT NULL NOT ENFORCED
Date
Msg-id CACJufxH=+od8Wy0P4L3_GpapNwLUP3oAes5UFRJ7yTxrM_M5kg@mail.gmail.com
Whole thread Raw
In response to Re: NOT NULL NOT ENFORCED  (Álvaro Herrera <alvherre@kurilemu.de>)
List pgsql-hackers
On Thu, Sep 4, 2025 at 8:00 PM Álvaro Herrera <alvherre@kurilemu.de> wrote:
>
> > @@ -1272,33 +1294,41 @@ transformTableLikeClause(CreateStmtContext *cxt, TableLikeClause *table_like_cla
> >        * Reproduce not-null constraints, if any, by copying them.  We do this
> >        * regardless of options given.
> >        */
> > -     if (tupleDesc->constr && tupleDesc->constr->has_not_null)
> > -     {
> > -             List       *lst;
> > +     lst = RelationGetNotNullConstraints(RelationGetRelid(relation), false,
> > +                                                                             true);
> > +     cxt->nnconstraints = list_concat(cxt->nnconstraints, lst);
> >
> > -             lst = RelationGetNotNullConstraints(RelationGetRelid(relation), false,
> > -                                                                                     true);
>
> > +     /*
> > +      * When creating a new relation, marking the enforced not-null constraint as
> > +      * not valid doesn't make sense, so we treat it as valid.
> > +     */
> > +     foreach_node(Constraint, nnconstr, lst)
> > +     {
> > +             if (nnconstr->is_enforced)
> > +             {
> > +                     nnconstr->skip_validation = false;
> > +                     nnconstr->initially_valid = true;
> > +             }
> > +     }
>
> Hmmm, this bit here (making constraints as valid if they're not valid in
> the source table) looks like a fix for the existing code.  I think it
> should be a separate patch, perhaps back-patchable to 18.  Or maybe I'm
> missing something ...?
>

it's indeed a bug, which was introduced

https://git.postgresql.org/cgit/postgresql.git/diff/src/backend/parser/parse_utilcmd.c?id=ca87c415e2fccf81cec6fd45698dde9fae0ab570

attached is the fix, also added a test on create_table_like.sql

Attachment

pgsql-hackers by date:

Previous
From: "Maksim.Melnikov"
Date:
Subject: Incorrect checksum in control file with pg_rewind test
Next
From: Nathan Bossart
Date:
Subject: Re: Improve LWLock tranche name visibility across backends