mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08:00
Increase test coverage in RI_Initial_Check()
This covers the special error handling of FKCONSTR_MATCH_FULL. Reviewed-by: Alvaro Herrera <alvherre@2ndquadrant.com> Reviewed-by: Mi Tar <mmitar@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/7ae17c95-0c99-d420-032a-c271f510112b@2ndquadrant.com/
This commit is contained in:
parent
45ed6e1ae0
commit
304e9f031b
@ -339,6 +339,18 @@ SELECT * FROM PKTABLE;
|
||||
0 | Test4
|
||||
(4 rows)
|
||||
|
||||
DROP TABLE FKTABLE;
|
||||
DROP TABLE PKTABLE;
|
||||
--
|
||||
-- Check initial check upon ALTER TABLE
|
||||
--
|
||||
CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, PRIMARY KEY(ptest1, ptest2) );
|
||||
CREATE TABLE FKTABLE ( ftest1 int, ftest2 int );
|
||||
INSERT INTO PKTABLE VALUES (1, 2);
|
||||
INSERT INTO FKTABLE VALUES (1, NULL);
|
||||
ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2) REFERENCES PKTABLE MATCH FULL;
|
||||
ERROR: insert or update on table "fktable" violates foreign key constraint "fktable_ftest1_fkey"
|
||||
DETAIL: MATCH FULL does not allow mixing of null and nonnull key values.
|
||||
DROP TABLE FKTABLE;
|
||||
DROP TABLE PKTABLE;
|
||||
-- MATCH SIMPLE
|
||||
@ -1607,6 +1619,11 @@ INSERT INTO fk_partitioned_fk (a,b) VALUES (NULL, NULL);
|
||||
INSERT INTO fk_notpartitioned_pk VALUES (1, 2);
|
||||
CREATE TABLE fk_partitioned_fk_full (x int, y int) PARTITION BY RANGE (x);
|
||||
CREATE TABLE fk_partitioned_fk_full_1 PARTITION OF fk_partitioned_fk_full DEFAULT;
|
||||
INSERT INTO fk_partitioned_fk_full VALUES (1, NULL);
|
||||
ALTER TABLE fk_partitioned_fk_full ADD FOREIGN KEY (x, y) REFERENCES fk_notpartitioned_pk MATCH FULL; -- fails
|
||||
ERROR: insert or update on table "fk_partitioned_fk_full" violates foreign key constraint "fk_partitioned_fk_full_x_fkey"
|
||||
DETAIL: MATCH FULL does not allow mixing of null and nonnull key values.
|
||||
TRUNCATE fk_partitioned_fk_full;
|
||||
ALTER TABLE fk_partitioned_fk_full ADD FOREIGN KEY (x, y) REFERENCES fk_notpartitioned_pk MATCH FULL;
|
||||
INSERT INTO fk_partitioned_fk_full VALUES (1, NULL); -- fails
|
||||
ERROR: insert or update on table "fk_partitioned_fk_full_1" violates foreign key constraint "fk_partitioned_fk_full_x_fkey"
|
||||
|
@ -219,6 +219,20 @@ SELECT * FROM PKTABLE;
|
||||
DROP TABLE FKTABLE;
|
||||
DROP TABLE PKTABLE;
|
||||
|
||||
--
|
||||
-- Check initial check upon ALTER TABLE
|
||||
--
|
||||
CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, PRIMARY KEY(ptest1, ptest2) );
|
||||
CREATE TABLE FKTABLE ( ftest1 int, ftest2 int );
|
||||
|
||||
INSERT INTO PKTABLE VALUES (1, 2);
|
||||
INSERT INTO FKTABLE VALUES (1, NULL);
|
||||
|
||||
ALTER TABLE FKTABLE ADD FOREIGN KEY(ftest1, ftest2) REFERENCES PKTABLE MATCH FULL;
|
||||
|
||||
DROP TABLE FKTABLE;
|
||||
DROP TABLE PKTABLE;
|
||||
|
||||
|
||||
-- MATCH SIMPLE
|
||||
|
||||
@ -1214,6 +1228,9 @@ INSERT INTO fk_partitioned_fk (a,b) VALUES (NULL, NULL);
|
||||
INSERT INTO fk_notpartitioned_pk VALUES (1, 2);
|
||||
CREATE TABLE fk_partitioned_fk_full (x int, y int) PARTITION BY RANGE (x);
|
||||
CREATE TABLE fk_partitioned_fk_full_1 PARTITION OF fk_partitioned_fk_full DEFAULT;
|
||||
INSERT INTO fk_partitioned_fk_full VALUES (1, NULL);
|
||||
ALTER TABLE fk_partitioned_fk_full ADD FOREIGN KEY (x, y) REFERENCES fk_notpartitioned_pk MATCH FULL; -- fails
|
||||
TRUNCATE fk_partitioned_fk_full;
|
||||
ALTER TABLE fk_partitioned_fk_full ADD FOREIGN KEY (x, y) REFERENCES fk_notpartitioned_pk MATCH FULL;
|
||||
INSERT INTO fk_partitioned_fk_full VALUES (1, NULL); -- fails
|
||||
DROP TABLE fk_partitioned_fk_full;
|
||||
|
Loading…
Reference in New Issue
Block a user