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的主要内容,如果未能解决你的问题,请参考以下文章

AIR:基于窗口的 mxml 组件中的组件被冻结

基类不可访问错误,为啥私有继承会这样做?

类型错误:类对象不可迭代[重复]

Chrome 自动完成锁定输入,就像它们不可点击一样

软冻结和硬冻结有什么区别?

excel如何冻结首行和最后1行?