Re: Can't find not null constraint, but \d+ shows that - Mailing list pgsql-hackers

From Tender Wang
Subject Re: Can't find not null constraint, but \d+ shows that
Date
Msg-id CAHewXNnUCfQme3YYe4CM1fY7+kMKGJzbdsWB5oSQYnUM6k+xPw@mail.gmail.com
Whole thread Raw
In response to Re: Can't find not null constraint, but \d+ shows that  (jian he <jian.universality@gmail.com>)
Responses Re: Can't find not null constraint, but \d+ shows that
List pgsql-hackers


jian he <jian.universality@gmail.com> 于2024年4月10日周三 14:10写道:
On Wed, Apr 10, 2024 at 1:29 AM Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
>
> On 2024-Mar-29, Tender Wang wrote:
>
> > I think aboved case can explain what's meaning about comments in
> > dropconstraint_internal.
> > But here, in RemoveConstraintById() , we only care about primary key case,
> > so NOT NULL is better to removed from comments.
>
> Actually, I think it's better if all the resets of attnotnull occur in
> RemoveConstraintById, for both types of constraints; we would keep that
> block in dropconstraint_internal only to raise errors in the cases where
> the constraint is protecting a replica identity or a generated column.
> Something like the attached, perhaps, may need more polish.
>

DROP TABLE if exists notnull_tbl2;
CREATE TABLE notnull_tbl2 (c0 int generated by default as IDENTITY, c1 int);
ALTER TABLE notnull_tbl2 ADD CONSTRAINT Q PRIMARY KEY(c0, c1);
ALTER TABLE notnull_tbl2 DROP CONSTRAINT notnull_tbl2_c0_not_null;
ALTER TABLE notnull_tbl2 DROP c1;
\d notnull_tbl2

last "\d notnull_tbl2" command, master output is:
                        Table "public.notnull_tbl2"
 Column |  Type   | Collation | Nullable |             Default
--------+---------+-----------+----------+----------------------------------
 c0     | integer |           | not null | generated by default as identity



last "\d notnull_tbl2" command, applying
0001-Correctly-reset-attnotnull-when-constraints-dropped-.patch
output:
                        Table "public.notnull_tbl2"
 Column |  Type   | Collation | Nullable |             Default
--------+---------+-----------+----------+----------------------------------
 c0     | integer |           |          | generated by default as identity

Hmm,  
ALTER TABLE notnull_tbl2 DROP c1; will not call dropconstraint_internal(). 
When dropping PK constraint indirectly, c0's attnotnull was set to false in RemoveConstraintById().


--
Tender Wang
OpenPie:  https://en.openpie.com/

pgsql-hackers by date:

Previous
From: jian he
Date:
Subject: Re: Can't find not null constraint, but \d+ shows that
Next
From: Richard Guo
Date:
Subject: Re: Incorrect handling of IS [NOT] NULL quals on inheritance parents