Slide 33
Slide 33 text
Ranges
Range intrange, tsrange, …
intmultirange, …
Additional methods in the facets gem. https://www.postgresql.org/docs/14/rangetypes.html
5..7 or 5...8
Time.current..1.day.from_now
# endless or beginless ranges
Time.current..
..Date.yesterday
nil.. or Range.new(nil, nil)
# Beginning is always included if possible :-(
Test.pluck("intrange(1, 5, '()')").first # 2...5
Test.pluck("tstzrange(now(), now() + '1 hour', '()
# ArgumentError: The Ruby Range object does not
# support excluding the beginning of a Range.
SELECT int8range(5, 7, '[]'); -- [5,8]
SELECT int8range(5, 8); -- [5,8)
SELECT tstzrange(now(), now() + '1 day', '()');
-- ["2022-10-22 14:42:42+09","2022-10-23 14:42:42+09
-- endless or beginless ranges
SELECT tstzrange(now(), NULL);
SELECT tstzrange(NULL, NULL);
-- PG 14: Multiranges and operators
SELECT nummultirange(numrange(1, 20))
- nummultirange(numrange(4, 6));
-- {[1,4),[6,20)}
-- and many more… (exclusion constraints!)