@@ -1690,22 +1690,23 @@ DELETE FROM temporal_rng WHERE id = '[5,6)';
1690
1690
INSERT INTO temporal_rng (id, valid_at) VALUES
1691
1691
('[5,6)', daterange('2018-01-01', '2018-02-01')),
1692
1692
('[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)');
1694
1695
UPDATE 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');
1696
1697
-- A PK update sliding the edge between two referenced rows:
1697
1698
INSERT INTO temporal_rng (id, valid_at) VALUES
1698
1699
('[6,7)', daterange('2018-01-01', '2018-02-01')),
1699
1700
('[6,7)', daterange('2018-02-01', '2018-03-01'));
1700
1701
INSERT INTO temporal_fk_rng2rng (id, valid_at, parent_id) VALUES
1701
1702
('[4,5)', daterange('2018-01-15', '2018-02-15'), '[6,7)');
1702
1703
UPDATE 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)';
1706
1707
-- a PK update that fails because both are referenced:
1707
1708
UPDATE 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');
1709
1710
ERROR: update or delete on table "temporal_rng" violates foreign key constraint "temporal_fk_rng2rng_fk" on table "temporal_fk_rng2rng"
1710
1711
DETAIL: Key (id, valid_at)=([5,6), [2018-01-01,2018-02-01)) is still referenced from table "temporal_fk_rng2rng".
1711
1712
-- a PK update that fails because both are referenced, but not 'til commit:
@@ -1714,19 +1715,19 @@ BEGIN;
1714
1715
ALTER CONSTRAINT temporal_fk_rng2rng_fk
1715
1716
DEFERRABLE INITIALLY DEFERRED;
1716
1717
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');
1718
1719
COMMIT;
1719
1720
ERROR: update or delete on table "temporal_rng" violates foreign key constraint "temporal_fk_rng2rng_fk" on table "temporal_fk_rng2rng"
1720
1721
DETAIL: Key (id, valid_at)=([5,6), [2018-01-01,2018-02-01)) is still referenced from table "temporal_fk_rng2rng".
1721
1722
-- changing the scalar part fails:
1722
1723
UPDATE 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');
1724
1725
ERROR: update or delete on table "temporal_rng" violates foreign key constraint "temporal_fk_rng2rng_fk" on table "temporal_fk_rng2rng"
1725
1726
DETAIL: Key (id, valid_at)=([5,6), [2018-01-01,2018-02-01)) is still referenced from table "temporal_fk_rng2rng".
1726
1727
-- then delete the objecting FK record and the same PK update succeeds:
1727
1728
DELETE FROM temporal_fk_rng2rng WHERE id = '[3,4)';
1728
1729
UPDATE 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');
1730
1731
--
1731
1732
-- test FK referenced updates RESTRICT
1732
1733
--
@@ -1746,19 +1747,20 @@ DELETE FROM temporal_rng WHERE id = '[5,6)';
1746
1747
INSERT INTO temporal_rng (id, valid_at) VALUES
1747
1748
('[5,6)', daterange('2018-01-01', '2018-02-01')),
1748
1749
('[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)');
1750
1752
UPDATE 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');
1752
1754
-- A PK update sliding the edge between two referenced rows:
1753
1755
INSERT INTO temporal_rng (id, valid_at) VALUES
1754
1756
('[6,7)', daterange('2018-01-01', '2018-02-01')),
1755
1757
('[6,7)', daterange('2018-02-01', '2018-03-01'));
1756
1758
INSERT INTO temporal_fk_rng2rng (id, valid_at, parent_id) VALUES
1757
1759
('[4,5)', daterange('2018-01-15', '2018-02-15'), '[6,7)');
1758
1760
UPDATE 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)';
1762
1764
ERROR: update or delete on table "temporal_rng" violates RESTRICT setting of foreign key constraint "temporal_fk_rng2rng_fk" on table "temporal_fk_rng2rng"
1763
1765
DETAIL: Key (id, valid_at)=([6,7), [2018-01-01,2018-02-01)) is referenced from table "temporal_fk_rng2rng".
1764
1766
-- 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
1773
1775
ROLLBACK;
1774
1776
-- changing the scalar part fails:
1775
1777
UPDATE 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');
1777
1779
ERROR: update or delete on table "temporal_rng" violates RESTRICT setting of foreign key constraint "temporal_fk_rng2rng_fk" on table "temporal_fk_rng2rng"
1778
1780
DETAIL: Key (id, valid_at)=([5,6), [2018-01-01,2018-02-01)) is referenced from table "temporal_fk_rng2rng".
1779
1781
-- then delete the objecting FK record and the same PK update succeeds:
1780
1782
DELETE FROM temporal_fk_rng2rng WHERE id = '[3,4)';
1781
1783
UPDATE 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');
1783
1785
--
1784
1786
-- test FK referenced deletes NO ACTION
1785
1787
--
@@ -1797,7 +1799,8 @@ DELETE FROM temporal_rng WHERE id = '[5,6)';
1797
1799
INSERT INTO temporal_rng (id, valid_at) VALUES
1798
1800
('[5,6)', daterange('2018-01-01', '2018-02-01')),
1799
1801
('[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)');
1801
1804
DELETE FROM temporal_rng WHERE id = '[5,6)' AND valid_at = daterange('2018-02-01', '2018-03-01');
1802
1805
-- a PK delete that fails because both are referenced:
1803
1806
DELETE 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)';
1832
1835
INSERT INTO temporal_rng (id, valid_at) VALUES
1833
1836
('[5,6)', daterange('2018-01-01', '2018-02-01')),
1834
1837
('[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)');
1836
1840
DELETE FROM temporal_rng WHERE id = '[5,6)' AND valid_at = daterange('2018-02-01', '2018-03-01');
1837
1841
-- a PK delete that fails because both are referenced (even before commit):
1838
1842
BEGIN;
@@ -2178,22 +2182,23 @@ DELETE FROM temporal_mltrng WHERE id = '[5,6)';
2178
2182
INSERT INTO temporal_mltrng (id, valid_at) VALUES
2179
2183
('[5,6)', datemultirange(daterange('2018-01-01', '2018-02-01'))),
2180
2184
('[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)');
2182
2187
UPDATE 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'));
2184
2189
-- A PK update sliding the edge between two referenced rows:
2185
2190
INSERT INTO temporal_mltrng (id, valid_at) VALUES
2186
2191
('[6,7)', datemultirange(daterange('2018-01-01', '2018-02-01'))),
2187
2192
('[6,7)', datemultirange(daterange('2018-02-01', '2018-03-01')));
2188
2193
INSERT INTO temporal_fk_mltrng2mltrng (id, valid_at, parent_id) VALUES
2189
2194
('[4,5)', datemultirange(daterange('2018-01-15', '2018-02-15')), '[6,7)');
2190
2195
UPDATE 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)';
2194
2199
-- a PK update that fails because both are referenced:
2195
2200
UPDATE 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'));
2197
2202
ERROR: update or delete on table "temporal_mltrng" violates foreign key constraint "temporal_fk_mltrng2mltrng_fk" on table "temporal_fk_mltrng2mltrng"
2198
2203
DETAIL: Key (id, valid_at)=([5,6), {[2018-01-01,2018-02-01)}) is still referenced from table "temporal_fk_mltrng2mltrng".
2199
2204
-- 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
2208
2213
DETAIL: Key (id, valid_at)=([5,6), {[2018-01-01,2018-02-01)}) is still referenced from table "temporal_fk_mltrng2mltrng".
2209
2214
-- changing the scalar part fails:
2210
2215
UPDATE 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'));
2212
2217
ERROR: update or delete on table "temporal_mltrng" violates foreign key constraint "temporal_fk_mltrng2mltrng_fk" on table "temporal_fk_mltrng2mltrng"
2213
2218
DETAIL: Key (id, valid_at)=([5,6), {[2018-01-01,2018-02-01)}) is still referenced from table "temporal_fk_mltrng2mltrng".
2214
2219
--
@@ -2230,19 +2235,20 @@ DELETE FROM temporal_mltrng WHERE id = '[5,6)';
2230
2235
INSERT INTO temporal_mltrng (id, valid_at) VALUES
2231
2236
('[5,6)', datemultirange(daterange('2018-01-01', '2018-02-01'))),
2232
2237
('[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)');
2234
2240
UPDATE 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'));
2236
2242
-- A PK update sliding the edge between two referenced rows:
2237
2243
INSERT INTO temporal_mltrng (id, valid_at) VALUES
2238
2244
('[6,7)', datemultirange(daterange('2018-01-01', '2018-02-01'))),
2239
2245
('[6,7)', datemultirange(daterange('2018-02-01', '2018-03-01')));
2240
2246
INSERT INTO temporal_fk_mltrng2mltrng (id, valid_at, parent_id) VALUES
2241
2247
('[4,5)', datemultirange(daterange('2018-01-15', '2018-02-15')), '[6,7)');
2242
2248
UPDATE 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)';
2246
2252
ERROR: update or delete on table "temporal_mltrng" violates RESTRICT setting of foreign key constraint "temporal_fk_mltrng2mltrng_fk" on table "temporal_fk_mltrng2mltrng"
2247
2253
DETAIL: Key (id, valid_at)=([6,7), {[2018-01-01,2018-02-01)}) is referenced from table "temporal_fk_mltrng2mltrng".
2248
2254
-- 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
2257
2263
ROLLBACK;
2258
2264
-- changing the scalar part fails:
2259
2265
UPDATE 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'));
2261
2267
ERROR: update or delete on table "temporal_mltrng" violates RESTRICT setting of foreign key constraint "temporal_fk_mltrng2mltrng_fk" on table "temporal_fk_mltrng2mltrng"
2262
2268
DETAIL: Key (id, valid_at)=([5,6), {[2018-01-01,2018-02-01)}) is referenced from table "temporal_fk_mltrng2mltrng".
2263
2269
--