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

From Peter Eisentraut
Subject Re: NOT NULL NOT ENFORCED
Date
Msg-id 603c0aad-6e0a-4fab-93f8-563bbb8509b4@eisentraut.org
Whole thread Raw
In response to Re: NOT NULL NOT ENFORCED  (jian he <jian.universality@gmail.com>)
List pgsql-hackers
On 04.09.25 17:20, jian he wrote:
> 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

I have committed this fix.




pgsql-hackers by date:

Previous
From: Shlok Kyal
Date:
Subject: Re: issue with synchronized_standby_slots
Next
From: Alexander Kukushkin
Date:
Subject: Re: issue with synchronized_standby_slots