例如,我在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])

推荐答案

PostgreSQL有一个名为RangeData Type

范围类型是表示某些值的范围的数据类型 元素类型(称为范围的子类型).例如,范围 时间戳可用于表示会议的时间范围 房间已预订.在本例中,数据类型为tsrange(缩写为 Timestamp Range),Timestamp为子类型.子类型必须 有一个总顺序,以便明确定义元素值 在某个值范围内、之前或之后.

内置的range types个中的一个是

tstzrange-带时区的时间戳范围,tstzmultirange-对应的多范围


Doobie有一个extension for PostgreSQL,提供对

有一个关于add support for Range type的公开问题,是在Jul 4, 2019公开的,最后一次活动是在Jul 29, 2019.

如果您查看名为TypeSuitepostgres types的单元测试postgres module,您将看到以下行,其中未选中所有范围类型:

  // 8.17 Range Types
  skip("int4range")
  skip("int8range")
  skip("numrange")
  skip("tsrange")
  skip("tstzrange")
  skip("daterange")
  skip("custom")

在这种情况下,我认为您将需要使用Doobie拥有的Custom Mappings.我找到了一台gist,它的custom mapping for tsrange相当接近你所需要的.同样在前面提到的公开问题中,有a suggestion about how custom mapping for ranges can be done个.

Postgresql相关问答推荐

带有regex表达式的Postgres SQL

在postgres中查找多个表中不同列的计数和总和

ANTLR4 PostgreSQL语法被 destruct 了吗?

锁定模式与PostgreSQL中的另一种锁定模式冲突到底是什么意思?

Jsonb[]字段中的PostgreSQL否定&q;-0.0

忽略 split_part 的第 n 个分隔符之后

Postgres 函数 now() 返回不正确的时区偏移量

这个 Supbase 查询在 SQL ( Postgresql ) 中的类似功能是什么

TimescaleDB 连续聚合:如何存储连续聚合结果

查找列中的数据是否满足sql中的数据类型条件

如何在 PSQL 中查找从另一个表继承的子表

Docker - 判断 postgres 是否准备好

在执行 postgresql 函数时提交事务

INSERT RETURNING 是否保证以 right的顺序返回?

带有 -C 选项的 pg_restore 不会创建数据库

如何在 psycopg2 中使用服务器端游标

使用 pg-promise 插入多条记录

设置 Phoenix 框架和 Ecto 以使用 UUID:如何插入生成的值?

在 Postgresql 中按窗口函数结果过滤

如何获取一个月的天数?