例如,我在postgres中创建了表vacations
:
create table if not exists vacations (
person text primary key,
vacations tstzmultirange not null
)
在Scala方面,我有:
case class Interval(start: Instant, end: Instant)
case class PersonalLeaves(person: String, onLeave: Seq[Interval])
1条答案
按热度按时间qxsslcnc1#
PostgreSQL有一个数据类型名为Range
范围类型是表示某个元素类型的值范围的数据类型(称为范围的子类型)。例如,时间戳的范围可以用于表示会议室被预留的时间范围。在这种情况下,数据类型是tsrange(“timestamp range”的缩写),timestamp是子类型。子类型必须有一个总顺序,以便明确定义元素值是在值范围内、之前还是之后。
其中一个内置的范围类型是
tstzrange
-带时区的时间戳范围,tstzmultirange
-对应的多范围Doobie有一个extension for PostgreSQL,它支持
uuid
、inet
和hstore
在
Jul 4, 2019
上有一个add support for Range type的未决问题,最后一个活动是在Jul 29, 2019
上。如果查看名为TypeSuite的postgres types的postgres module的单元测试,您将看到以下几行,其中没有检查所有范围类型:
在这种情况下,我认为你需要使用doobie拥有的Custom Mappings。我能够找到一个
gist
,创建一个custom mapping for tsrange,这是非常接近你需要的。同样在前面提到的开放问题中,有一个关于如何完成范围的自定义Map的建议。