Re: cataloguing NOT NULL constraints
Isaac Morland <isaac.morland@gmail.com>
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 Mon, 19 Sept 2022 at 09:32, Robert Haas <robertmhaas@gmail.com> wrote: > On Wed, Aug 17, 2022 at 2:12 PM Alvaro Herrera <alvherre@alvh.no-ip.org> > wrote: > > If you say CREATE TABLE (a int NOT NULL), you'll get a CHECK constraint > > printed by psql: (this is a bit more noisy that previously and it > > changes a lot of regression tests output). > > > > 55489 16devel 1776237=# create table tab (a int not null); > > CREATE TABLE > > 55489 16devel 1776237=# \d tab > > Tabla «public.tab» > > Columna │ Tipo │ Ordenamiento │ Nulable │ Por omisión > > ─────────┼─────────┼──────────────┼──────────┼───────────── > > a │ integer │ │ not null │ > > Restricciones CHECK: > > "tab_a_not_null" CHECK (a IS NOT NULL) > > In a table with many columns, most of which are NOT NULL, this is > going to produce a ton of clutter. I don't like that. > > I'm not sure what a good alternative would be, though. > I thought I saw some discussion about the SQL standard saying that there is a difference between putting NOT NULL in a column definition, and CHECK (column_name NOT NULL). So if we're going to take this seriously, I think that means there needs to be a field in pg_constraint which identifies whether a constraint is a "real" one created explicitly as a constraint, or if it is just one created because a field is marked NOT NULL. If this is correct, the answer is easy: don't show constraints that are there only because of a NOT NULL in the \d or \d+ listings. I certainly don't want to see that clutter and I'm having trouble seeing why anybody else would want to see it either; the information is already there in the "Nullable" column of the field listing. The error message for a duplicate constraint name when creating a constraint needs however to be very clear that the conflict is with a NOT NULL constraint and which one, since I'm proposing leaving those ones off the visible listing, and it would be very bad for somebody to get "duplicate name" and then be unable to see the conflicting entry.