【问题标题】:How to map text ARRAY in Postgres to Scala Slick如何将 Postgres 中的文本数组映射到 Scala Slick
【发布时间】:2021-05-20 21:18:02
【问题描述】:

我的 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]] ,我哪里出错了?

谢谢

【问题讨论】:

  • 谢谢,所以我现在使用 slick-pg 并创建了与 Github 存储库中的示例完全相同的 postgresProfile,但 _text 被识别为以下内容:``` val test_field: Rep[Option [scala.collection.Seq]] = column[Option[scala.collection.Seq]]("test_field", O.Default(None))``` 感叹Type scala.collection.Seq takes type parameters。如果我将 String 作为类型参数传递,则会抱怨隐式。有什么想法吗?

标签: postgresql scala slick


【解决方案1】:

我雇用了slick-pg 并创建了我自己的MyPostgresProfile,详见项目的自述文件。事实证明,Slick 在 Postgres 中处理 text[] 存在问题,尽管 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 很好地处理了它。

【讨论】:

    猜你喜欢
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2015-12-28
    • 2016-11-22
    • 2016-02-10
    • 2014-09-03
    • 2012-10-29
    相关资源
    最近更新 更多