@@ -143,6 +143,12 @@ SELECT * FROM FKTABLE;
143
143
| | 8
144
144
(5 rows)
145
145
146
+ -- Check update with part of key null
147
+ UPDATE FKTABLE SET ftest1 = NULL WHERE ftest1 = 1;
148
+ ERROR: insert or update on table "fktable" violates foreign key constraint "constrname"
149
+ DETAIL: MATCH FULL does not allow mixing of null and nonnull key values.
150
+ -- Check update with old and new key values equal
151
+ UPDATE FKTABLE SET ftest1 = 1 WHERE ftest1 = 1;
146
152
-- Try altering the column type where foreign keys are involved
147
153
ALTER TABLE PKTABLE ALTER COLUMN ptest1 TYPE bigint;
148
154
ALTER TABLE FKTABLE ALTER COLUMN ftest1 TYPE bigint;
@@ -158,11 +164,11 @@ SELECT * FROM PKTABLE;
158
164
SELECT * FROM FKTABLE;
159
165
ftest1 | ftest2 | ftest3
160
166
--------+--------+--------
161
- 1 | 3 | 5
162
167
3 | 6 | 12
163
168
| | 0
164
169
| | 4
165
170
| | 8
171
+ 1 | 3 | 5
166
172
(5 rows)
167
173
168
174
DROP TABLE PKTABLE CASCADE;
@@ -1597,6 +1603,15 @@ INSERT INTO fk_notpartitioned_pk VALUES (2502, 2503);
1597
1603
INSERT INTO fk_partitioned_fk_3 (a, b) VALUES (2502, 2503);
1598
1604
-- this always works
1599
1605
INSERT INTO fk_partitioned_fk (a,b) VALUES (NULL, NULL);
1606
+ -- MATCH FULL
1607
+ INSERT INTO fk_notpartitioned_pk VALUES (1, 2);
1608
+ CREATE TABLE fk_partitioned_fk_full (x int, y int) PARTITION BY RANGE (x);
1609
+ CREATE TABLE fk_partitioned_fk_full_1 PARTITION OF fk_partitioned_fk_full DEFAULT;
1610
+ ALTER TABLE fk_partitioned_fk_full ADD FOREIGN KEY (x, y) REFERENCES fk_notpartitioned_pk MATCH FULL;
1611
+ INSERT INTO fk_partitioned_fk_full VALUES (1, NULL); -- fails
1612
+ ERROR: insert or update on table "fk_partitioned_fk_full_1" violates foreign key constraint "fk_partitioned_fk_full_x_fkey"
1613
+ DETAIL: MATCH FULL does not allow mixing of null and nonnull key values.
1614
+ DROP TABLE fk_partitioned_fk_full;
1600
1615
-- ON UPDATE SET NULL
1601
1616
SELECT tableoid::regclass, a, b FROM fk_partitioned_fk WHERE b IS NULL ORDER BY a;
1602
1617
tableoid | a | b
0 commit comments