首页 > 解决方案 > 从 PostgreSQL 中的 JSON 数组索引和查询 int 值

问题描述

我想创建一个包含jsonb数据类型的列的表。索引和查询数组中的 int 值的正确方法是什么?

入口:

{
  "list": [
    {
      "type": "FOO",
      "value": 1000
    },
    {
      "type": "BAR",
      "value": 200
    }
  ]
}

2个不同的查询,我想找到所有包含列表项的条目,

标签: postgresqljsonbdatabase-indexes

解决方案


您将无法索引任何>比较,但可以索引相等条件:

CREATE INDEX ON tabname USING gin (jsonbcol jsonb_path_ops);

这可以由如下查询使用:

SELECT id FROM tabname
WHERE jsonbcol @> '{ "list": [ {"type": "FOO"} ] }';

如果您计划在数据库中大量使用 JSON 属性,那么您做错了。将要索引的属性保留在常规数据库列中。在您的情况下,这将是一个单独的表,它使用外键链接到您的表,因此每行可以有多个条目。


推荐阅读