Re: Support NOT VALID / VALIDATE constraint options for named NOT NULL constraints
Alvaro Herrera <alvherre@alvh.no-ip.org>
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
To: jian he <jian.universality@gmail.com>
Cc: Rushabh Lathia <rushabh.lathia@gmail.com>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2025-04-07T17:24:27Z
Lists: pgsql-hackers
On 2025-Apr-07, jian he wrote: > CREATE TABLE t (a int, b int); > INSERT INTO t VALUES (NULL, 1), (300, 3); > ALTER TABLE t ADD CONSTRAINT nn NOT NULL a NOT VALID; -- ok > ALTER TABLE t add column c float8 default random(); > the last query should not fail. Agreed. > if we want more places use CompactAttribute->attnullability > set_attnotnull should also set CompactAttribute->attnullability proactively > not waiting CommandCounterIncrement invoke RelationBuildTupleDesc. Actually, the fix here was to tweak equalTupleDescs to also compare attnullability, and then ensure that a relcache invalidation happens. That way the old tupdesc goes away correctly. I have pushed this after some small additional changes. I ran some of the tests under debug_discard_caches=1 to make sure that invalidations are handled correctly also. I have to admit that this patch was much more difficult than I had initially anticipated. Thank you Rushabh very much for the effort in writing and rewriting as the different ideas came and went, and Jian for the eagle eyes and the additional test cases and debugging. Cheers -- Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/ "In Europe they call me Niklaus Wirth; in the US they call me Nickel's worth. That's because in Europe they call me by name, and in the US by value!"
Commits
-
Allow NOT NULL constraints to be added as NOT VALID
- a379061a22a8 18.0 landed
-
Add missing deparsing of [NO] IDENT to XMLSERIALIZE()
- 984410b92326 18.0 cited
-
backend launchers void * arguments for binary data
- 7202d72787d3 18.0 cited
-
Add pg_constraint rows for not-null constraints
- 14e87ffa5c54 18.0 cited
-
Create the infrastructure for planner support functions.
- 1fb57af92069 12.0 cited
-
Add prokind column, replacing proisagg and proiswindow
- fd1a421fe661 11.0 cited