Metabase/Clojure 错误:不可冻结类型:类 org.postgresql.jdbc.PgArray
Posted
技术标签:
【中文标题】Metabase/Clojure 错误:不可冻结类型:类 org.postgresql.jdbc.PgArray【英文标题】:Metabase/Clojure error: Unfreezable type: class 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)。但我真的很想了解为什么会这样。感谢您提供任何见解。
【问题讨论】:
【参考方案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 类型本身上,所以无论在哪里使用,它都不会是可序列化的。以上是关于Metabase/Clojure 错误:不可冻结类型:类 org.postgresql.jdbc.PgArray的主要内容,如果未能解决你的问题,请参考以下文章