使用doobie,如何将Scala case类Map到类型为tstzmultirange的postgresql列?

hs1ihplo  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(116)

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

qxsslcnc1#

PostgreSQL有一个数据类型名为Range
范围类型是表示某个元素类型的值范围的数据类型(称为范围的子类型)。例如,时间戳的范围可以用于表示会议室被预留的时间范围。在这种情况下,数据类型是tsrange(“timestamp range”的缩写),timestamp是子类型。子类型必须有一个总顺序,以便明确定义元素值是在值范围内、之前还是之后。
其中一个内置的范围类型
tstzrange-带时区的时间戳范围,tstzmultirange-对应的多范围
Doobie有一个extension for PostgreSQL,它支持

  • Java 8时间类型(JSR 310)
  • 数组类型
  • 几何类型
  • PostGIS类型
  • 其他非标准类型,如uuidinethstore

Jul 4, 2019上有一个add support for Range type的未决问题,最后一个活动是在Jul 29, 2019上。
如果查看名为TypeSuite的postgres typespostgres 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,这是非常接近你需要的。同样在前面提到的开放问题中,有一个关于如何完成范围的自定义Map的建议。

相关问题