Re: cataloguing NOT NULL constraints
Alvaro Herrera <alvherre@alvh.no-ip.org>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Revert structural changes to not-null constraints
- 6f8bb7c1e961 17.0 landed
-
Fix inconsistencies in error messages
- 21ac38f498b3 17.0 landed
-
Disallow direct change of NO INHERIT of not-null constraints
- d45597f72fe5 17.0 landed
-
Disallow NO INHERIT not-null constraints on partitioned tables
- 13daa33fa5a6 17.0 landed
-
Better handle indirect constraint drops
- 0cd711271d42 17.0 cited
-
Don't try to assign smart names to constraints
- d72d32f52d26 17.0 cited
-
Fix restore of not-null constraints with inheritance
- d9f686a72ee9 17.0 landed
-
ATTACH PARTITION: Don't match a PK with a UNIQUE constraint
- cee8db3f680b 17.0 landed
-
Fix propagating attnotnull in multiple inheritance
- c3709100be73 17.0 landed
-
Check stack depth in new recursive functions
- b0f7dd915bca 17.0 landed
-
Move privilege check to the right place
- ac22a9545ca9 17.0 cited
-
Update information_schema definition for not-null constraints
- 3af721794272 17.0 landed
-
Fix not-null constraint test
- d0ec2ddbe088 17.0 landed
-
Disallow changing NO INHERIT status of a not-null constraint
- 9b581c534186 17.0 cited
-
Catalog not-null constraints
- b0e96f311985 17.0 cited
-
parallel_schedule: add comment on event_trigger test dependency
- c8e43c22be27 17.0 landed
-
Revert "Catalog NOT NULL constraints" and fallout
- 9ce04b50e120 16.0 landed
-
Adjust contrib/sepgsql regression test expected outputs.
- 76c111a7f166 16.0 landed
-
Fix table name clash in recently introduced test
- 728015a47016 16.0 landed
-
Catalog NOT NULL constraints
- e056c557aef4 16.0 landed
-
Change the rules for inherited CHECK constraints to be essentially the same
- cd902b331dc4 8.4.0 cited
On 2023-Jul-24, Dean Rasheed wrote: > Hmm, I'm not so sure. I think perhaps multiple NOT NULL constraints on > the same column should just be allowed, otherwise things might get > confusing. For example: > create table p1 (a int not null check (a > 0)); create table p2 (a int not null check (a > 0)); create table foo () inherits (p1, p2); Have a look at the conislocal / coninhcount values. These should reflect the fact that the constraint has multiple sources; and the constraint does disappear if you drop it from both sources. > If I then drop the p1 constraints: > > alter table p1 drop constraint p1_a_check; > alter table p1 drop constraint p1_a_not_null; > > I end up with column "a" still being not null, and the "p1_a_not_null" > constraint still being there on foo, which seems even more > counter-intuitive, because I just dropped that constraint, and it > really should now be the "p2_a_not_null" constraint that makes "a" not > null: I can see that it might make sense to not inherit the constraint name in some cases. Perhaps: 1. never inherit a name. Each table has its own constraint name always 2. only inherit if there's a single parent 3. always inherit the name from the first parent (current implementation) > So I'd say that ALTER TABLE ... ADD NOT NULL should always add a > constraint, even if there already is one. For example ALTER TABLE ... > ADD UNIQUE does nothing to prevent multiple unique constraints on the > same column(s). It seems pretty dumb, but maybe there is a reason to > allow it, and it doesn't feel like we should be second-guessing what > the user wants. That was my initial implementation but I changed it to allowing a single constraint because of the way the standard describes SET NOT NULL; specifically, 11.15 <set column not null clause> says that "If the column descriptor of C does not contain an indication that C is defined as NOT NULL, then:" a constraint is added; otherwise (i.e., such an indication does exist), nothing happens. -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/ "La virtud es el justo medio entre dos defectos" (Aristóteles)