@@ -1690,22 +1690,23 @@ DELETE FROM temporal_rng WHERE id = '[5,6)';
16901690INSERT INTO temporal_rng (id, valid_at) VALUES
16911691 ('[5,6)', daterange('2018-01-01', '2018-02-01')),
16921692 ('[5,6)', daterange('2018-02-01', '2018-03-01'));
1693- INSERT INTO temporal_fk_rng2rng (id, valid_at, parent_id) VALUES ('[3,4)', daterange('2018-01-05', '2018-01-10'), '[5,6)');
1693+ INSERT INTO temporal_fk_rng2rng (id, valid_at, parent_id)
1694+ VALUES ('[3,4)', daterange('2018-01-05', '2018-01-10'), '[5,6)');
16941695UPDATE temporal_rng SET valid_at = daterange('2016-02-01', '2016-03-01')
1695- WHERE id = '[5,6)' AND valid_at = daterange('2018-02-01', '2018-03-01');
1696+ WHERE id = '[5,6)' AND valid_at = daterange('2018-02-01', '2018-03-01');
16961697-- A PK update sliding the edge between two referenced rows:
16971698INSERT INTO temporal_rng (id, valid_at) VALUES
16981699 ('[6,7)', daterange('2018-01-01', '2018-02-01')),
16991700 ('[6,7)', daterange('2018-02-01', '2018-03-01'));
17001701INSERT INTO temporal_fk_rng2rng (id, valid_at, parent_id) VALUES
17011702 ('[4,5)', daterange('2018-01-15', '2018-02-15'), '[6,7)');
17021703UPDATE temporal_rng
1703- SET valid_at = CASE WHEN lower(valid_at) = '2018-01-01' THEN daterange('2018-01-01', '2018-01-05')
1704- WHEN lower(valid_at) = '2018-02-01' THEN daterange('2018-01-05', '2018-03-01') END
1705- WHERE id = '[6,7)';
1704+ SET valid_at = CASE WHEN lower(valid_at) = '2018-01-01' THEN daterange('2018-01-01', '2018-01-05')
1705+ WHEN lower(valid_at) = '2018-02-01' THEN daterange('2018-01-05', '2018-03-01') END
1706+ WHERE id = '[6,7)';
17061707-- a PK update that fails because both are referenced:
17071708UPDATE temporal_rng SET valid_at = daterange('2016-01-01', '2016-02-01')
1708- WHERE id = '[5,6)' AND valid_at = daterange('2018-01-01', '2018-02-01');
1709+ WHERE id = '[5,6)' AND valid_at = daterange('2018-01-01', '2018-02-01');
17091710ERROR: update or delete on table "temporal_rng" violates foreign key constraint "temporal_fk_rng2rng_fk" on table "temporal_fk_rng2rng"
17101711DETAIL: Key (id, valid_at)=([5,6), [2018-01-01,2018-02-01)) is still referenced from table "temporal_fk_rng2rng".
17111712-- a PK update that fails because both are referenced, but not 'til commit:
@@ -1714,19 +1715,19 @@ BEGIN;
17141715 ALTER CONSTRAINT temporal_fk_rng2rng_fk
17151716 DEFERRABLE INITIALLY DEFERRED;
17161717 UPDATE temporal_rng SET valid_at = daterange('2016-01-01', '2016-02-01')
1717- WHERE id = '[5,6)' AND valid_at = daterange('2018-01-01', '2018-02-01');
1718+ WHERE id = '[5,6)' AND valid_at = daterange('2018-01-01', '2018-02-01');
17181719COMMIT;
17191720ERROR: update or delete on table "temporal_rng" violates foreign key constraint "temporal_fk_rng2rng_fk" on table "temporal_fk_rng2rng"
17201721DETAIL: Key (id, valid_at)=([5,6), [2018-01-01,2018-02-01)) is still referenced from table "temporal_fk_rng2rng".
17211722-- changing the scalar part fails:
17221723UPDATE temporal_rng SET id = '[7,8)'
1723- WHERE id = '[5,6)' AND valid_at = daterange('2018-01-01', '2018-02-01');
1724+ WHERE id = '[5,6)' AND valid_at = daterange('2018-01-01', '2018-02-01');
17241725ERROR: update or delete on table "temporal_rng" violates foreign key constraint "temporal_fk_rng2rng_fk" on table "temporal_fk_rng2rng"
17251726DETAIL: Key (id, valid_at)=([5,6), [2018-01-01,2018-02-01)) is still referenced from table "temporal_fk_rng2rng".
17261727-- then delete the objecting FK record and the same PK update succeeds:
17271728DELETE FROM temporal_fk_rng2rng WHERE id = '[3,4)';
17281729UPDATE temporal_rng SET valid_at = daterange('2016-01-01', '2016-02-01')
1729- WHERE id = '[5,6)' AND valid_at = daterange('2018-01-01', '2018-02-01');
1730+ WHERE id = '[5,6)' AND valid_at = daterange('2018-01-01', '2018-02-01');
17301731--
17311732-- test FK referenced updates RESTRICT
17321733--
@@ -1746,19 +1747,20 @@ DELETE FROM temporal_rng WHERE id = '[5,6)';
17461747INSERT INTO temporal_rng (id, valid_at) VALUES
17471748 ('[5,6)', daterange('2018-01-01', '2018-02-01')),
17481749 ('[5,6)', daterange('2018-02-01', '2018-03-01'));
1749- INSERT INTO temporal_fk_rng2rng (id, valid_at, parent_id) VALUES ('[3,4)', daterange('2018-01-05', '2018-01-10'), '[5,6)');
1750+ INSERT INTO temporal_fk_rng2rng (id, valid_at, parent_id) VALUES
1751+ ('[3,4)', daterange('2018-01-05', '2018-01-10'), '[5,6)');
17501752UPDATE temporal_rng SET valid_at = daterange('2016-02-01', '2016-03-01')
1751- WHERE id = '[5,6)' AND valid_at = daterange('2018-02-01', '2018-03-01');
1753+ WHERE id = '[5,6)' AND valid_at = daterange('2018-02-01', '2018-03-01');
17521754-- A PK update sliding the edge between two referenced rows:
17531755INSERT INTO temporal_rng (id, valid_at) VALUES
17541756 ('[6,7)', daterange('2018-01-01', '2018-02-01')),
17551757 ('[6,7)', daterange('2018-02-01', '2018-03-01'));
17561758INSERT INTO temporal_fk_rng2rng (id, valid_at, parent_id) VALUES
17571759 ('[4,5)', daterange('2018-01-15', '2018-02-15'), '[6,7)');
17581760UPDATE temporal_rng
1759- SET valid_at = CASE WHEN lower(valid_at) = '2018-01-01' THEN daterange('2018-01-01', '2018-01-05')
1760- WHEN lower(valid_at) = '2018-02-01' THEN daterange('2018-01-05', '2018-03-01') END
1761- WHERE id = '[6,7)';
1761+ SET valid_at = CASE WHEN lower(valid_at) = '2018-01-01' THEN daterange('2018-01-01', '2018-01-05')
1762+ WHEN lower(valid_at) = '2018-02-01' THEN daterange('2018-01-05', '2018-03-01') END
1763+ WHERE id = '[6,7)';
17621764ERROR: update or delete on table "temporal_rng" violates RESTRICT setting of foreign key constraint "temporal_fk_rng2rng_fk" on table "temporal_fk_rng2rng"
17631765DETAIL: Key (id, valid_at)=([6,7), [2018-01-01,2018-02-01)) is referenced from table "temporal_fk_rng2rng".
17641766-- a PK update that fails because both are referenced (even before commit):
@@ -1773,13 +1775,13 @@ DETAIL: Key (id, valid_at)=([5,6), [2018-01-01,2018-02-01)) is referenced from
17731775ROLLBACK;
17741776-- changing the scalar part fails:
17751777UPDATE temporal_rng SET id = '[7,8)'
1776- WHERE id = '[5,6)' AND valid_at = daterange('2018-01-01', '2018-02-01');
1778+ WHERE id = '[5,6)' AND valid_at = daterange('2018-01-01', '2018-02-01');
17771779ERROR: update or delete on table "temporal_rng" violates RESTRICT setting of foreign key constraint "temporal_fk_rng2rng_fk" on table "temporal_fk_rng2rng"
17781780DETAIL: Key (id, valid_at)=([5,6), [2018-01-01,2018-02-01)) is referenced from table "temporal_fk_rng2rng".
17791781-- then delete the objecting FK record and the same PK update succeeds:
17801782DELETE FROM temporal_fk_rng2rng WHERE id = '[3,4)';
17811783UPDATE temporal_rng SET valid_at = daterange('2016-01-01', '2016-02-01')
1782- WHERE id = '[5,6)' AND valid_at = daterange('2018-01-01', '2018-02-01');
1784+ WHERE id = '[5,6)' AND valid_at = daterange('2018-01-01', '2018-02-01');
17831785--
17841786-- test FK referenced deletes NO ACTION
17851787--
@@ -1797,7 +1799,8 @@ DELETE FROM temporal_rng WHERE id = '[5,6)';
17971799INSERT INTO temporal_rng (id, valid_at) VALUES
17981800 ('[5,6)', daterange('2018-01-01', '2018-02-01')),
17991801 ('[5,6)', daterange('2018-02-01', '2018-03-01'));
1800- INSERT INTO temporal_fk_rng2rng (id, valid_at, parent_id) VALUES ('[3,4)', daterange('2018-01-05', '2018-01-10'), '[5,6)');
1802+ INSERT INTO temporal_fk_rng2rng (id, valid_at, parent_id) VALUES
1803+ ('[3,4)', daterange('2018-01-05', '2018-01-10'), '[5,6)');
18011804DELETE FROM temporal_rng WHERE id = '[5,6)' AND valid_at = daterange('2018-02-01', '2018-03-01');
18021805-- a PK delete that fails because both are referenced:
18031806DELETE FROM temporal_rng WHERE id = '[5,6)' AND valid_at = daterange('2018-01-01', '2018-02-01');
@@ -1832,7 +1835,8 @@ DELETE FROM temporal_rng WHERE id = '[5,6)';
18321835INSERT INTO temporal_rng (id, valid_at) VALUES
18331836 ('[5,6)', daterange('2018-01-01', '2018-02-01')),
18341837 ('[5,6)', daterange('2018-02-01', '2018-03-01'));
1835- INSERT INTO temporal_fk_rng2rng (id, valid_at, parent_id) VALUES ('[3,4)', daterange('2018-01-05', '2018-01-10'), '[5,6)');
1838+ INSERT INTO temporal_fk_rng2rng (id, valid_at, parent_id) VALUES
1839+ ('[3,4)', daterange('2018-01-05', '2018-01-10'), '[5,6)');
18361840DELETE FROM temporal_rng WHERE id = '[5,6)' AND valid_at = daterange('2018-02-01', '2018-03-01');
18371841-- a PK delete that fails because both are referenced (even before commit):
18381842BEGIN;
@@ -2178,22 +2182,23 @@ DELETE FROM temporal_mltrng WHERE id = '[5,6)';
21782182INSERT INTO temporal_mltrng (id, valid_at) VALUES
21792183 ('[5,6)', datemultirange(daterange('2018-01-01', '2018-02-01'))),
21802184 ('[5,6)', datemultirange(daterange('2018-02-01', '2018-03-01')));
2181- INSERT INTO temporal_fk_mltrng2mltrng (id, valid_at, parent_id) VALUES ('[3,4)', datemultirange(daterange('2018-01-05', '2018-01-10')), '[5,6)');
2185+ INSERT INTO temporal_fk_mltrng2mltrng (id, valid_at, parent_id) VALUES
2186+ ('[3,4)', datemultirange(daterange('2018-01-05', '2018-01-10')), '[5,6)');
21822187UPDATE temporal_mltrng SET valid_at = datemultirange(daterange('2016-02-01', '2016-03-01'))
2183- WHERE id = '[5,6)' AND valid_at = datemultirange(daterange('2018-02-01', '2018-03-01'));
2188+ WHERE id = '[5,6)' AND valid_at = datemultirange(daterange('2018-02-01', '2018-03-01'));
21842189-- A PK update sliding the edge between two referenced rows:
21852190INSERT INTO temporal_mltrng (id, valid_at) VALUES
21862191 ('[6,7)', datemultirange(daterange('2018-01-01', '2018-02-01'))),
21872192 ('[6,7)', datemultirange(daterange('2018-02-01', '2018-03-01')));
21882193INSERT INTO temporal_fk_mltrng2mltrng (id, valid_at, parent_id) VALUES
21892194 ('[4,5)', datemultirange(daterange('2018-01-15', '2018-02-15')), '[6,7)');
21902195UPDATE temporal_mltrng
2191- SET valid_at = CASE WHEN lower(valid_at) = '2018-01-01' THEN datemultirange(daterange('2018-01-01', '2018-01-05'))
2192- WHEN lower(valid_at) = '2018-02-01' THEN datemultirange(daterange('2018-01-05', '2018-03-01')) END
2193- WHERE id = '[6,7)';
2196+ SET valid_at = CASE WHEN lower(valid_at) = '2018-01-01' THEN datemultirange(daterange('2018-01-01', '2018-01-05'))
2197+ WHEN lower(valid_at) = '2018-02-01' THEN datemultirange(daterange('2018-01-05', '2018-03-01')) END
2198+ WHERE id = '[6,7)';
21942199-- a PK update that fails because both are referenced:
21952200UPDATE temporal_mltrng SET valid_at = datemultirange(daterange('2016-01-01', '2016-02-01'))
2196- WHERE id = '[5,6)' AND valid_at = datemultirange(daterange('2018-01-01', '2018-02-01'));
2201+ WHERE id = '[5,6)' AND valid_at = datemultirange(daterange('2018-01-01', '2018-02-01'));
21972202ERROR: update or delete on table "temporal_mltrng" violates foreign key constraint "temporal_fk_mltrng2mltrng_fk" on table "temporal_fk_mltrng2mltrng"
21982203DETAIL: Key (id, valid_at)=([5,6), {[2018-01-01,2018-02-01)}) is still referenced from table "temporal_fk_mltrng2mltrng".
21992204-- a PK update that fails because both are referenced, but not 'til commit:
@@ -2208,7 +2213,7 @@ ERROR: update or delete on table "temporal_mltrng" violates foreign key constra
22082213DETAIL: Key (id, valid_at)=([5,6), {[2018-01-01,2018-02-01)}) is still referenced from table "temporal_fk_mltrng2mltrng".
22092214-- changing the scalar part fails:
22102215UPDATE temporal_mltrng SET id = '[7,8)'
2211- WHERE id = '[5,6)' AND valid_at = datemultirange(daterange('2018-01-01', '2018-02-01'));
2216+ WHERE id = '[5,6)' AND valid_at = datemultirange(daterange('2018-01-01', '2018-02-01'));
22122217ERROR: update or delete on table "temporal_mltrng" violates foreign key constraint "temporal_fk_mltrng2mltrng_fk" on table "temporal_fk_mltrng2mltrng"
22132218DETAIL: Key (id, valid_at)=([5,6), {[2018-01-01,2018-02-01)}) is still referenced from table "temporal_fk_mltrng2mltrng".
22142219--
@@ -2230,19 +2235,20 @@ DELETE FROM temporal_mltrng WHERE id = '[5,6)';
22302235INSERT INTO temporal_mltrng (id, valid_at) VALUES
22312236 ('[5,6)', datemultirange(daterange('2018-01-01', '2018-02-01'))),
22322237 ('[5,6)', datemultirange(daterange('2018-02-01', '2018-03-01')));
2233- INSERT INTO temporal_fk_mltrng2mltrng (id, valid_at, parent_id) VALUES ('[3,4)', datemultirange(daterange('2018-01-05', '2018-01-10')), '[5,6)');
2238+ INSERT INTO temporal_fk_mltrng2mltrng (id, valid_at, parent_id) VALUES
2239+ ('[3,4)', datemultirange(daterange('2018-01-05', '2018-01-10')), '[5,6)');
22342240UPDATE temporal_mltrng SET valid_at = datemultirange(daterange('2016-02-01', '2016-03-01'))
2235- WHERE id = '[5,6)' AND valid_at = datemultirange(daterange('2018-02-01', '2018-03-01'));
2241+ WHERE id = '[5,6)' AND valid_at = datemultirange(daterange('2018-02-01', '2018-03-01'));
22362242-- A PK update sliding the edge between two referenced rows:
22372243INSERT INTO temporal_mltrng (id, valid_at) VALUES
22382244 ('[6,7)', datemultirange(daterange('2018-01-01', '2018-02-01'))),
22392245 ('[6,7)', datemultirange(daterange('2018-02-01', '2018-03-01')));
22402246INSERT INTO temporal_fk_mltrng2mltrng (id, valid_at, parent_id) VALUES
22412247 ('[4,5)', datemultirange(daterange('2018-01-15', '2018-02-15')), '[6,7)');
22422248UPDATE temporal_mltrng
2243- SET valid_at = CASE WHEN lower(valid_at) = '2018-01-01' THEN datemultirange(daterange('2018-01-01', '2018-01-05'))
2244- WHEN lower(valid_at) = '2018-02-01' THEN datemultirange(daterange('2018-01-05', '2018-03-01')) END
2245- WHERE id = '[6,7)';
2249+ SET valid_at = CASE WHEN lower(valid_at) = '2018-01-01' THEN datemultirange(daterange('2018-01-01', '2018-01-05'))
2250+ WHEN lower(valid_at) = '2018-02-01' THEN datemultirange(daterange('2018-01-05', '2018-03-01')) END
2251+ WHERE id = '[6,7)';
22462252ERROR: update or delete on table "temporal_mltrng" violates RESTRICT setting of foreign key constraint "temporal_fk_mltrng2mltrng_fk" on table "temporal_fk_mltrng2mltrng"
22472253DETAIL: Key (id, valid_at)=([6,7), {[2018-01-01,2018-02-01)}) is referenced from table "temporal_fk_mltrng2mltrng".
22482254-- a PK update that fails because both are referenced (even before commit):
@@ -2257,7 +2263,7 @@ DETAIL: Key (id, valid_at)=([5,6), {[2018-01-01,2018-02-01)}) is referenced fro
22572263ROLLBACK;
22582264-- changing the scalar part fails:
22592265UPDATE temporal_mltrng SET id = '[7,8)'
2260- WHERE id = '[5,6)' AND valid_at = datemultirange(daterange('2018-01-01', '2018-02-01'));
2266+ WHERE id = '[5,6)' AND valid_at = datemultirange(daterange('2018-01-01', '2018-02-01'));
22612267ERROR: update or delete on table "temporal_mltrng" violates RESTRICT setting of foreign key constraint "temporal_fk_mltrng2mltrng_fk" on table "temporal_fk_mltrng2mltrng"
22622268DETAIL: Key (id, valid_at)=([5,6), {[2018-01-01,2018-02-01)}) is referenced from table "temporal_fk_mltrng2mltrng".
22632269--
0 commit comments