3 ms·
Specifically, here's how that would be done in Postgres: create table reservation1 (duration tstzrange); select * from reservation1 where duration && '[201
by walrus 9y ago
Specifically, here's how that would be done in Postgres:
create table reservation1 (duration tstzrange);
select * from reservation1 where duration && '[2017-04-30, 2017-05-07]';
In a database without range types, it would look like this:
create table reservation2 (start timestamptz, stop timestamptz, check (start <= stop));
select * from reservation2 where '2017-04-30' <= stop and start <= '2017-05-07';
Personally, I don't think range types by themselves are anything special. However, combined with indexes and exclusion constraints, they're really great:
create table reservation1 (duration tsrange, exclude using gist (duration with &&));
insert into reservation1 values ('[2017-04-30, 2017-05-07]'); -- ok
insert into reservation1 values ('[2017-05-10, 2017-05-12]'); -- ok
insert into reservation1 values ('[2017-05-05, 2017-05-08]'); -- error!
Here's the difference indexes made when retrieving all the scheduling conflicts with a fixed interval (500k rows):
No index (start, stop) 123ms
Btree index (start, stop) 29ms
GIST index (duration) 0.2ms
Quite a difference!