【发布时间】:2018-03-31 21:55:20
【问题描述】:
TLDR:如果我想在 Postgres 表中保存整数数组,使用数组列 (integer[]) 与使用 JSON 列(例如。一个比另一个表现更好)?
背景故事:
我正在使用 PostgreSQL 数据库,并使用 Node/Knex 来管理它。 Knex 没有任何方法可以直接定义 PostgreSQL integer[] 列类型,因此有人提交了一个 Knex 错误要求...但其中一位 Knex 开发人员关闭了票证,基本上说没有必要支持 PostgreSQL当任何人都可以使用 JSON 列类型时,数组列类型。
我的问题是,使用 JSON 列类型来保存一个简单的整数数组有什么缺点(如果有的话)?使用真正的数组列是否有任何好处(例如提高性能),或者仅将数组存储在 JSON 列中是否也同样好?
编辑:为了清楚起见,我在答案中寻找的只是以下之一:
A) 对 PostgreSQL 中 JSON 列和 integer[] 列如何工作的解释,包括一个比另一个更好或两者如何(至少大致)相等。
B) 没有解释,但至少参考了一些基准,表明一种或另一种列类型表现更好(或两者相等)
【问题讨论】:
-
JSON(B)是比简单数组复杂得多的类型,因此需要更多操作(至少在内部)来管理其值;数组可以以简单的方式被索引,而JSON数组不能(据我所知);在 PostgreSQL 中有很多函数/运算符来处理数组,而对于JSON(B)数组,只有一种方法是将其转换为一组值并逐个处理它们...... -
是的,我主要对 JSON 而非 JSON(B) 感到好奇。至于
integer[]列被索引而 JSON 不被索引,这也是我最初的想法,但 Knex 的人往往对数据库非常了解,所以我认为他们使用 JSON 的建议可能是基于对问题(因为我远非 Postgres 专家)。 -
JSON(B)列可以被索引,但条件有限(例如,key=value或field contains some key)Doc -
对不起,我可以发表一下PostgreSQL方面的意见。而且我不知道为什么 Knex 开发人员认为使用 JSON 列可能比自然类型更有效(除了解析包含 JSON 的字符串对他们来说更简单)
标签: postgresql knex.js