我想在postgres中使用范围类型来实现预订服务。基本模式是area
,表示范围,以及一组reservations
,它们是总区域的子集。
create table area (
id int primary key,
range int8range);
create table reserved (
area int references area (id),
range int8range);
我已经成功完成了一些基本操作,但是我一直在构建分配未使用空间的查询。
例如,如果范围为[0,100)的区域有两个预留[20,50]和[60,90],并且我想保留一个大小为10的空间,那么我想找到一个未使用的部分总面积(例如[0,10))。但是,如果我想保留大小为30的空间,那么我想生成多个不连续的区域(例如[0,10],[50,60]和[90,100))。