diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2023-08-29 19:19:24 +0200 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2023-08-29 19:19:24 +0200 |
commit | 9b581c53418666205938311ef86047aa3c6b741f (patch) | |
tree | 326e4a2629f5cb02052e4f9c5b889895db262b75 /src/test | |
parent | 952db4979f9fea3fb4fd1eb07b310c85fdc2a8b9 (diff) | |
download | postgresql-9b581c53418666205938311ef86047aa3c6b741f.tar.gz postgresql-9b581c53418666205938311ef86047aa3c6b741f.zip |
Disallow changing NO INHERIT status of a not-null constraint
It makes no sense to add a NO INHERIT not-null constraint to a child
table that already has one in that column inherited from its parent.
Disallow that, and add tests for the relevant cases.
Per complaint from Kyotaro Horiguchi. I also used part of his proposed
patch.
Co-authored-by: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Co-authored-by: Álvaro Herrera <alvherre@alvh.no-ip.org>
Discussion: https://postgr.es/m/20230828.161658.1184657435220765047.horikyota.ntt@gmail.com
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/regress/expected/inherit.out | 9 | ||||
-rw-r--r-- | src/test/regress/sql/inherit.sql | 6 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/test/regress/expected/inherit.out b/src/test/regress/expected/inherit.out index 6daca12340c..dae61b9a0b1 100644 --- a/src/test/regress/expected/inherit.out +++ b/src/test/regress/expected/inherit.out @@ -2051,6 +2051,15 @@ Not-null constraints: Inherits: pp1, cc1 +-- cannot create table with inconsistent NO INHERIT constraint +create table cc3 (a2 int not null no inherit) inherits (cc1); +NOTICE: moving and merging column "a2" with inherited definition +DETAIL: User-specified column moved to the position of the inherited column. +ERROR: cannot define not-null constraint on column "a2" with NO INHERIT +DETAIL: The column has an inherited not-null constraint. +-- change NO INHERIT status of inherited constraint: no dice, it's inherited +alter table cc2 add not null a2 no inherit; +ERROR: cannot change NO INHERIT status of inherited NOT NULL constraint "nn" on relation "cc2" -- remove constraint from cc2: no dice, it's inherited alter table cc2 alter column a2 drop not null; ERROR: cannot drop inherited constraint "nn" of relation "cc2" diff --git a/src/test/regress/sql/inherit.sql b/src/test/regress/sql/inherit.sql index d8fae92a533..9ceaec1d78e 100644 --- a/src/test/regress/sql/inherit.sql +++ b/src/test/regress/sql/inherit.sql @@ -736,6 +736,12 @@ alter table pp1 alter column f1 set not null; \d+ cc1 \d+ cc2 +-- cannot create table with inconsistent NO INHERIT constraint +create table cc3 (a2 int not null no inherit) inherits (cc1); + +-- change NO INHERIT status of inherited constraint: no dice, it's inherited +alter table cc2 add not null a2 no inherit; + -- remove constraint from cc2: no dice, it's inherited alter table cc2 alter column a2 drop not null; |