Postgres 数组列与 JSONB 列

Posted

技术标签:

【中文标题】Postgres 数组列与 JSONB 列【英文标题】:Postgres Array column vs JSONB column 【发布时间】:2020-02-25 20:40:32 【问题描述】:

Postgres 数组列是否比包含 JSON 数组的 JSONB 列更容易被索引?

https://www.postgresql.org/docs/current/arrays.html

https://www.compose.com/articles/faster-operations-with-the-jsonb-data-type-in-postgresql/

【问题讨论】:

简单是什么意思? 我想无论是从数据库的努力还是对开发人员的努力 与您的问题无关,但是:Postgres 9.4 是no longer supported,您应该尽快计划升级。 【参考方案1】:

从语法上讲,JSONB 数组可能更易于使用,因为您不必将查询值包装在虚拟数组构造函数中:

where jsonbcolumn ? 'abc';

where textarraycolumn @> ARRAY['abc']

另一方面,规划器可能会使用 PostgreSQL 数组做出更好的决策,因为它会收集有关其内容的统计信息,但不会收集 JSONB。

此外,您应该阅读您正在使用的 PostgreSQL 版本的文档,该版本希望大于 9.4,实际上应该大于 9.1。

【讨论】:

第二个条件也可以写成where 'abc' = any(textarraycolumn) @a_horse_with_no_name 是的,但该公式不会使用索引。

以上是关于Postgres 数组列与 JSONB 列的主要内容,如果未能解决你的问题,请参考以下文章

Postgres检查jsonb数组是不是不包含值返回空结果集

如何在 Postgres 9.4 中对 JSONB 类型的列执行更新操作

在 postgres 中传播语法 JSONB 列

postgres jsonb列中的模糊字符串匹配

JDBCTemplate RowMapper 读取 postgres 表中的 jsonb 列

将嵌套的 JSONB 数组连接成单个字符串