Fix determination of not-null constraint "locality" for inherited columns
authorÁlvaro Herrera <alvherre@kurilemu.de>
Sat, 18 Oct 2025 16:18:19 +0000 (18:18 +0200)
committerÁlvaro Herrera <alvherre@kurilemu.de>
Sat, 18 Oct 2025 16:18:19 +0000 (18:18 +0200)
It is possible to have a non-inherited not-null constraint on an
inherited column, but we were failing to preserve such constraints
during pg_upgrade where the source is 17 or older, because of a bug in
the pg_dump query for it.  Oversight in commit 14e87ffa5c54.  Fix that
query.  In passing, touch-up a bogus nearby comment introduced by the
same commit.

In version 17, make the regression tests leave a table in this
situation, so that this scenario is tested in the cross-version upgrade
tests of 18 and up.

Author: Dilip Kumar <dilipbalaut@gmail.com>
Reported-by: Andrew Bille <andrewbille@gmail.com>
Bug: #19074
Backpatch-through: 18
Discussion: https://postgr.es/m/19074-ae2548458cf0195c@postgresql.org

src/test/regress/expected/constraints.out
src/test/regress/sql/constraints.sql

index a5b5795e587360915eb8b9e3bc9309b769700704..d64128bc41690c32fc5e3da0260316d829ea70da 100644 (file)
@@ -834,3 +834,7 @@ DROP ROLE regress_constraint_comments_noaccess;
 CREATE DOMAIN constraint_comments_dom AS int;
 ALTER DOMAIN constraint_comments_dom ADD CONSTRAINT inv_ck CHECK (value > 0) NOT VALID;
 COMMENT ON CONSTRAINT inv_ck ON DOMAIN constraint_comments_dom IS 'comment on invalid constraint';
+-- Create a table that exercises pg_upgrade
+CREATE TABLE regress_notnull1 (a integer);
+CREATE TABLE regress_notnull2 () INHERITS (regress_notnull1);
+ALTER TABLE ONLY regress_notnull2 ALTER COLUMN a SET NOT NULL;
index c47db9469f5dc92f455d320bce8ea0044e503642..b5e10f79202e599178c5a5a3ba9ab140e1d8642e 100644 (file)
@@ -638,3 +638,8 @@ CREATE DOMAIN constraint_comments_dom AS int;
 
 ALTER DOMAIN constraint_comments_dom ADD CONSTRAINT inv_ck CHECK (value > 0) NOT VALID;
 COMMENT ON CONSTRAINT inv_ck ON DOMAIN constraint_comments_dom IS 'comment on invalid constraint';
+
+-- Create a table that exercises pg_upgrade
+CREATE TABLE regress_notnull1 (a integer);
+CREATE TABLE regress_notnull2 () INHERITS (regress_notnull1);
+ALTER TABLE ONLY regress_notnull2 ALTER COLUMN a SET NOT NULL;