3
3
-- We leave behind several tables to test pg_dump etc:
4
4
-- temporal_rng, temporal_rng2,
5
5
-- temporal_fk_rng2rng.
6
+ SET datestyle TO ISO, YMD;
6
7
--
7
8
-- test input parser
8
9
--
9
10
-- PK with no columns just WITHOUT OVERLAPS:
10
11
CREATE TABLE temporal_rng (
11
- valid_at tsrange ,
12
+ valid_at daterange ,
12
13
CONSTRAINT temporal_rng_pk PRIMARY KEY (valid_at WITHOUT OVERLAPS)
13
14
);
14
15
ERROR: constraint using WITHOUT OVERLAPS needs at least two columns
@@ -34,15 +35,15 @@ CREATE TABLE temporal_rng (
34
35
-- use an int4range instead of an int.
35
36
-- (The rangetypes regression test uses the same trick.)
36
37
id int4range,
37
- valid_at tsrange ,
38
+ valid_at daterange ,
38
39
CONSTRAINT temporal_rng_pk PRIMARY KEY (id, valid_at WITHOUT OVERLAPS)
39
40
);
40
41
\d temporal_rng
41
42
Table "public.temporal_rng"
42
43
Column | Type | Collation | Nullable | Default
43
44
----------+-----------+-----------+----------+---------
44
45
id | int4range | | not null |
45
- valid_at | tsrange | | not null |
46
+ valid_at | daterange | | not null |
46
47
Indexes:
47
48
"temporal_rng_pk" PRIMARY KEY (id, valid_at WITHOUT OVERLAPS)
48
49
@@ -63,7 +64,7 @@ SELECT pg_get_indexdef(conindid, 0, true) FROM pg_constraint WHERE conname = 'te
63
64
CREATE TABLE temporal_rng2 (
64
65
id1 int4range,
65
66
id2 int4range,
66
- valid_at tsrange ,
67
+ valid_at daterange ,
67
68
CONSTRAINT temporal_rng2_pk PRIMARY KEY (id1, id2, valid_at WITHOUT OVERLAPS)
68
69
);
69
70
\d temporal_rng2
@@ -72,7 +73,7 @@ CREATE TABLE temporal_rng2 (
72
73
----------+-----------+-----------+----------+---------
73
74
id1 | int4range | | not null |
74
75
id2 | int4range | | not null |
75
- valid_at | tsrange | | not null |
76
+ valid_at | daterange | | not null |
76
77
Indexes:
77
78
"temporal_rng2_pk" PRIMARY KEY (id1, id2, valid_at WITHOUT OVERLAPS)
78
79
@@ -115,7 +116,7 @@ Indexes:
115
116
116
117
-- UNIQUE with no columns just WITHOUT OVERLAPS:
117
118
CREATE TABLE temporal_rng3 (
118
- valid_at tsrange ,
119
+ valid_at daterange ,
119
120
CONSTRAINT temporal_rng3_uq UNIQUE (valid_at WITHOUT OVERLAPS)
120
121
);
121
122
ERROR: constraint using WITHOUT OVERLAPS needs at least two columns
@@ -138,15 +139,15 @@ HINT: You must specify an operator class for the index or define a default oper
138
139
-- UNIQUE with one column plus a range:
139
140
CREATE TABLE temporal_rng3 (
140
141
id int4range,
141
- valid_at tsrange ,
142
+ valid_at daterange ,
142
143
CONSTRAINT temporal_rng3_uq UNIQUE (id, valid_at WITHOUT OVERLAPS)
143
144
);
144
145
\d temporal_rng3
145
146
Table "public.temporal_rng3"
146
147
Column | Type | Collation | Nullable | Default
147
148
----------+-----------+-----------+----------+---------
148
149
id | int4range | | |
149
- valid_at | tsrange | | |
150
+ valid_at | daterange | | |
150
151
Indexes:
151
152
"temporal_rng3_uq" UNIQUE (id, valid_at WITHOUT OVERLAPS)
152
153
@@ -167,7 +168,7 @@ DROP TABLE temporal_rng3;
167
168
CREATE TABLE temporal_rng3 (
168
169
id1 int4range,
169
170
id2 int4range,
170
- valid_at tsrange ,
171
+ valid_at daterange ,
171
172
CONSTRAINT temporal_rng3_uq UNIQUE (id1, id2, valid_at WITHOUT OVERLAPS)
172
173
);
173
174
\d temporal_rng3
@@ -176,7 +177,7 @@ CREATE TABLE temporal_rng3 (
176
177
----------+-----------+-----------+----------+---------
177
178
id1 | int4range | | |
178
179
id2 | int4range | | |
179
- valid_at | tsrange | | |
180
+ valid_at | daterange | | |
180
181
Indexes:
181
182
"temporal_rng3_uq" UNIQUE (id1, id2, valid_at WITHOUT OVERLAPS)
182
183
@@ -209,15 +210,15 @@ DROP TYPE textrange2;
209
210
DROP TABLE temporal_rng;
210
211
CREATE TABLE temporal_rng (
211
212
id int4range,
212
- valid_at tsrange
213
+ valid_at daterange
213
214
);
214
215
ALTER TABLE temporal_rng
215
216
ADD CONSTRAINT temporal_rng_pk
216
217
PRIMARY KEY (id, valid_at WITHOUT OVERLAPS);
217
218
-- PK with USING INDEX (not possible):
218
219
CREATE TABLE temporal3 (
219
220
id int4range,
220
- valid_at tsrange
221
+ valid_at daterange
221
222
);
222
223
CREATE INDEX idx_temporal3_uq ON temporal3 USING gist (id, valid_at);
223
224
ALTER TABLE temporal3
@@ -231,7 +232,7 @@ DROP TABLE temporal3;
231
232
-- UNIQUE with USING INDEX (not possible):
232
233
CREATE TABLE temporal3 (
233
234
id int4range,
234
- valid_at tsrange
235
+ valid_at daterange
235
236
);
236
237
CREATE INDEX idx_temporal3_uq ON temporal3 USING gist (id, valid_at);
237
238
ALTER TABLE temporal3
@@ -245,7 +246,7 @@ DROP TABLE temporal3;
245
246
-- UNIQUE with USING [UNIQUE] INDEX (possible but not a temporal constraint):
246
247
CREATE TABLE temporal3 (
247
248
id int4range,
248
- valid_at tsrange
249
+ valid_at daterange
249
250
);
250
251
CREATE UNIQUE INDEX idx_temporal3_uq ON temporal3 (id, valid_at);
251
252
ALTER TABLE temporal3
@@ -258,7 +259,7 @@ CREATE TABLE temporal3 (
258
259
id int4range
259
260
);
260
261
ALTER TABLE temporal3
261
- ADD COLUMN valid_at tsrange ,
262
+ ADD COLUMN valid_at daterange ,
262
263
ADD CONSTRAINT temporal3_pk
263
264
PRIMARY KEY (id, valid_at WITHOUT OVERLAPS);
264
265
DROP TABLE temporal3;
@@ -267,25 +268,25 @@ CREATE TABLE temporal3 (
267
268
id int4range
268
269
);
269
270
ALTER TABLE temporal3
270
- ADD COLUMN valid_at tsrange ,
271
+ ADD COLUMN valid_at daterange ,
271
272
ADD CONSTRAINT temporal3_uq
272
273
UNIQUE (id, valid_at WITHOUT OVERLAPS);
273
274
DROP TABLE temporal3;
274
275
--
275
276
-- test PK inserts
276
277
--
277
278
-- okay:
278
- INSERT INTO temporal_rng VALUES ('[1,1]', tsrange ('2018-01-02', '2018-02-03'));
279
- INSERT INTO temporal_rng VALUES ('[1,1]', tsrange ('2018-03-03', '2018-04-04'));
280
- INSERT INTO temporal_rng VALUES ('[2,2]', tsrange ('2018-01-01', '2018-01-05'));
281
- INSERT INTO temporal_rng VALUES ('[3,3]', tsrange ('2018-01-01', NULL));
279
+ INSERT INTO temporal_rng VALUES ('[1,1]', daterange ('2018-01-02', '2018-02-03'));
280
+ INSERT INTO temporal_rng VALUES ('[1,1]', daterange ('2018-03-03', '2018-04-04'));
281
+ INSERT INTO temporal_rng VALUES ('[2,2]', daterange ('2018-01-01', '2018-01-05'));
282
+ INSERT INTO temporal_rng VALUES ('[3,3]', daterange ('2018-01-01', NULL));
282
283
-- should fail:
283
- INSERT INTO temporal_rng VALUES ('[1,1]', tsrange ('2018-01-01', '2018-01-05'));
284
+ INSERT INTO temporal_rng VALUES ('[1,1]', daterange ('2018-01-01', '2018-01-05'));
284
285
ERROR: conflicting key value violates exclusion constraint "temporal_rng_pk"
285
- DETAIL: Key (id, valid_at)=([1,2), ["Mon Jan 01 00:00:00 2018","Fri Jan 05 00:00:00 2018" )) conflicts with existing key (id, valid_at)=([1,2), ["Tue Jan 02 00:00:00 2018","Sat Feb 03 00:00:00 2018" )).
286
- INSERT INTO temporal_rng VALUES (NULL, tsrange ('2018-01-01', '2018-01-05'));
286
+ DETAIL: Key (id, valid_at)=([1,2), [2018-01-01, 2018-01-05 )) conflicts with existing key (id, valid_at)=([1,2), [2018-01-02, 2018-02-03 )).
287
+ INSERT INTO temporal_rng VALUES (NULL, daterange ('2018-01-01', '2018-01-05'));
287
288
ERROR: null value in column "id" of relation "temporal_rng" violates not-null constraint
288
- DETAIL: Failing row contains (null, ["Mon Jan 01 00:00:00 2018","Fri Jan 05 00:00:00 2018" )).
289
+ DETAIL: Failing row contains (null, [2018-01-01, 2018-01-05 )).
289
290
INSERT INTO temporal_rng VALUES ('[3,3]', NULL);
290
291
ERROR: null value in column "valid_at" of relation "temporal_rng" violates not-null constraint
291
292
DETAIL: Failing row contains ([3,4), null).
@@ -311,7 +312,7 @@ DROP TABLE temporal3;
311
312
--
312
313
CREATE TABLE temporal3 (
313
314
id int4range,
314
- valid_at tsrange ,
315
+ valid_at daterange ,
315
316
CONSTRAINT temporal3_pk PRIMARY KEY (id, valid_at WITHOUT OVERLAPS)
316
317
);
317
318
ALTER TABLE temporal3 ALTER COLUMN valid_at DROP NOT NULL;
@@ -339,22 +340,22 @@ INSERT INTO temporal_partitioned VALUES
339
340
SELECT * FROM temporal_partitioned ORDER BY id, valid_at;
340
341
id | valid_at | name
341
342
-------+-------------------------+-------
342
- [1,2) | [01 -01-2000, 02-01-2000 ) | one
343
- [1,2) | [02-01-2000, 03-01-2000 ) | one
344
- [3,4) | [01 -01-2000,01 -01-2010 ) | three
343
+ [1,2) | [2000 -01-01,2000- 02-01) | one
344
+ [1,2) | [2000- 02-01,2000- 03-01) | one
345
+ [3,4) | [2000 -01-01,2010 -01-01 ) | three
345
346
(3 rows)
346
347
347
348
SELECT * FROM tp1 ORDER BY id, valid_at;
348
349
id | valid_at | name
349
350
-------+-------------------------+------
350
- [1,2) | [01 -01-2000, 02-01-2000 ) | one
351
- [1,2) | [02-01-2000, 03-01-2000 ) | one
351
+ [1,2) | [2000 -01-01,2000- 02-01) | one
352
+ [1,2) | [2000- 02-01,2000- 03-01) | one
352
353
(2 rows)
353
354
354
355
SELECT * FROM tp2 ORDER BY id, valid_at;
355
356
id | valid_at | name
356
357
-------+-------------------------+-------
357
- [3,4) | [01 -01-2000,01 -01-2010 ) | three
358
+ [3,4) | [2000 -01-01,2010 -01-01 ) | three
358
359
(1 row)
359
360
360
361
DROP TABLE temporal_partitioned;
@@ -374,22 +375,23 @@ INSERT INTO temporal_partitioned VALUES
374
375
SELECT * FROM temporal_partitioned ORDER BY id, valid_at;
375
376
id | valid_at | name
376
377
-------+-------------------------+-------
377
- [1,2) | [01 -01-2000, 02-01-2000 ) | one
378
- [1,2) | [02-01-2000, 03-01-2000 ) | one
379
- [3,4) | [01 -01-2000,01 -01-2010 ) | three
378
+ [1,2) | [2000 -01-01,2000- 02-01) | one
379
+ [1,2) | [2000- 02-01,2000- 03-01) | one
380
+ [3,4) | [2000 -01-01,2010 -01-01 ) | three
380
381
(3 rows)
381
382
382
383
SELECT * FROM tp1 ORDER BY id, valid_at;
383
384
id | valid_at | name
384
385
-------+-------------------------+------
385
- [1,2) | [01 -01-2000, 02-01-2000 ) | one
386
- [1,2) | [02-01-2000, 03-01-2000 ) | one
386
+ [1,2) | [2000 -01-01,2000- 02-01) | one
387
+ [1,2) | [2000- 02-01,2000- 03-01) | one
387
388
(2 rows)
388
389
389
390
SELECT * FROM tp2 ORDER BY id, valid_at;
390
391
id | valid_at | name
391
392
-------+-------------------------+-------
392
- [3,4) | [01 -01-2000,01 -01-2010 ) | three
393
+ [3,4) | [2000 -01-01,2010 -01-01 ) | three
393
394
(1 row)
394
395
395
396
DROP TABLE temporal_partitioned;
397
+ RESET datestyle;
0 commit comments