【问题标题】:Metabase/Clojure error: Unfreezable type: class org.postgresql.jdbc.PgArrayMetabase/Clojure 错误:不可冻结类型:类 org.postgresql.jdbc.PgArray
【发布时间】:2018-04-05 09:08:46
【问题描述】:

有人知道 Metabase 中的这个错误(或任何 Clojure 程序中的类似错误)吗?

Unfreezable type: class org.postgresql.jdbc.PgArray

当我在问题中使用 postgresql 数组类型(即TEXT[])时,它会定期发生,但并非总是如此 => 它可能以某种方式取决于 pgArray 中的确切数据,但我无法弄清楚如何。

有一个解决方法可以摆脱它:将所有 pgArray 重新键入/转换为 TEXT(或 VARCHAR)。但我真的很想了解为什么会这样。感谢您提供任何见解。

【问题讨论】:

    标签: postgresql clojure metabase


    【解决方案1】:

    Metabase 使用一个名为 Nippy 的库:

    https://github.com/metabase/metabase/blob/master/project.clj#L61

    Nippy 提供常见类型的快速序列化。错误“Unfreezable type”:

    https://github.com/ptaoussanis/nippy/blob/master/src/taoensso/nippy.clj#L720

    当 Nippy 遇到它不知道如何序列化的类型的数据时发生。 PgArray,作为定制的 Postgres 数组类型,显然是其中之一。

    为 Nippy 提供序列化指导并不难。也许用您的详细信息向 Metabase 人员提出问题,询问他们是否可以这样做?

    【讨论】:

    • 感谢您的信息。奇怪的是,有时即使存在 pgArray 类型,查询也会运行。所以也许它只能根据其中的数据序列化某种 pgArrays,而有些则不能。
    • 是的,也许;我不知道元数据库,但我的猜测是序列化不是每次操作。该应用程序用于数据可视化,对吗?在这种情况下,序列化大型结果集以进行本地操作/可视化可能是有意义的,而不是为小型结果集而烦恼。或者,当当前工作簿使用的工作数据集超过一定大小时进行序列化。类似的东西。序列化失败是在 PgArray 类型本身上,所以无论在哪里使用,它都不会是可序列化的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2020-11-20
    相关资源
    最近更新 更多