diff options
| author | Alvaro Herrera | 2023-09-01 12:21:27 +0000 |
|---|---|---|
| committer | Alvaro Herrera | 2023-09-01 12:21:27 +0000 |
| commit | e09d763e25dccc40695bc824ddda9abea791d66f (patch) | |
| tree | 479cecdc55e0e94c3f9430f779285086fc324925 /src/test/regress | |
| parent | e8d74ad625f7344f6b715254d3869663c1569a51 (diff) | |
ATPrepAddPrimaryKey: ignore non-PK constraints
Because of lack of test coverage, this function added by b0e96f311985
wasn't ignoring constraint types other than primary keys, which it
should have. Add some lines to a test for it.
Reported-by: Richard Guo <guofenglinux@gmail.com>
Discussion: https://postgr.es/m/CAMbWs48bc-k_-1fh0dZpAhp_LiR5MfEX9haystmoBboR_4czCQ@mail.gmail.com
Diffstat (limited to 'src/test/regress')
| -rw-r--r-- | src/test/regress/expected/inherit.out | 25 | ||||
| -rw-r--r-- | src/test/regress/sql/inherit.sql | 15 |
2 files changed, 38 insertions, 2 deletions
diff --git a/src/test/regress/expected/inherit.out b/src/test/regress/expected/inherit.out index dae61b9a0b1..59583e1e417 100644 --- a/src/test/regress/expected/inherit.out +++ b/src/test/regress/expected/inherit.out @@ -2309,7 +2309,30 @@ alter table inh_child inherit inh_parent; -- nope ERROR: column "a" in child table must be marked NOT NULL alter table inh_child alter a set not null; alter table inh_child inherit inh_parent; -- now it works -drop table inh_parent, inh_child; +-- don't interfere with other types of constraints +alter table inh_parent add constraint inh_parent_excl exclude ((1) with =); +alter table inh_parent add constraint inh_parent_uq unique (a); +alter table inh_parent add constraint inh_parent_fk foreign key (a) references inh_parent (a); +create table inh_child2 () inherits (inh_parent); +create table inh_child3 (like inh_parent); +alter table inh_child3 inherit inh_parent; +select conrelid::regclass, conname, contype, coninhcount, conislocal + from pg_constraint + where conrelid::regclass::text in ('inh_parent', 'inh_child', 'inh_child2', 'inh_child3') + order by 2, 1; + conrelid | conname | contype | coninhcount | conislocal +------------+-----------------------+---------+-------------+------------ + inh_child2 | inh_child2_a_not_null | n | 1 | f + inh_child3 | inh_child3_a_not_null | n | 1 | t + inh_child | inh_child_a_not_null | n | 1 | t + inh_child | inh_child_pkey | p | 0 | t + inh_parent | inh_parent_excl | x | 0 | t + inh_parent | inh_parent_fk | f | 0 | t + inh_parent | inh_parent_pkey | p | 0 | t + inh_parent | inh_parent_uq | u | 0 | t +(8 rows) + +drop table inh_parent, inh_child, inh_child2, inh_child3; -- -- test multi inheritance tree -- diff --git a/src/test/regress/sql/inherit.sql b/src/test/regress/sql/inherit.sql index 9ceaec1d78e..abe8602682c 100644 --- a/src/test/regress/sql/inherit.sql +++ b/src/test/regress/sql/inherit.sql @@ -846,7 +846,20 @@ create table inh_child (a int primary key); alter table inh_child inherit inh_parent; -- nope alter table inh_child alter a set not null; alter table inh_child inherit inh_parent; -- now it works -drop table inh_parent, inh_child; + +-- don't interfere with other types of constraints +alter table inh_parent add constraint inh_parent_excl exclude ((1) with =); +alter table inh_parent add constraint inh_parent_uq unique (a); +alter table inh_parent add constraint inh_parent_fk foreign key (a) references inh_parent (a); +create table inh_child2 () inherits (inh_parent); +create table inh_child3 (like inh_parent); +alter table inh_child3 inherit inh_parent; +select conrelid::regclass, conname, contype, coninhcount, conislocal + from pg_constraint + where conrelid::regclass::text in ('inh_parent', 'inh_child', 'inh_child2', 'inh_child3') + order by 2, 1; + +drop table inh_parent, inh_child, inh_child2, inh_child3; -- -- test multi inheritance tree |
