首页 > 解决方案 > 如何将 Postgres 中的文本数组映射到 Scala Slick

问题描述

我的 postgres 表中有以下列:

ALTER TABLE my_table
    ALTER COLUMN test_field TYPE text ARRAY USING test_field::text ARRAY

当我直接从我的 postgres 表中重新生成 Slick 模式时,我有以下“

*  @param test_field Database column test_field SqlType(_text), Length(2147483647,false), Default(None) */

  case class MyTable(id: java.util.UUID, created: Option[java.sql.Timestamp] = None, test_field: Option[String] = None)

  /** GetResult implicit for fetching MyTable objects using plain SQL queries */

  implicit def GetResultTable(implicit e0: GR[java.util.UUID], e1: GR[Option[java.sql.Timestamp]], e2: GR[String] = GR{
    prs => import prs._
    MyTable(<<[java.util.UUID], <<?[java.sql.Timestamp],<<?[String])
  }

我不确定为什么该字段未被识别为Option[Array[String]],我哪里出错了?

谢谢

标签: postgresqlscalaslick

解决方案


我使用slick-pg并创建了自己MyPostgresProfile的项目,如项目的 README 中所述。text[]事实证明,在 Postgres 中处理 Slick 存在问题,尽管slick-pg它确实支持数组:

[https://github.com/tminglei/slick-pg/tree/master/core/src/main/scala/com/github/tminglei/slickpg/array][1]

在生成表时,这样的数组实际上被视为一个Seq

我最终将 Postgres 中的数据类型从 Array 更改为 jsonb,插件使用JValue.


推荐阅读