【问题标题】:Indexing and querying int value from JSON array in PostgreSQL从 PostgreSQL 中的 JSON 数组索引和查询 int 值
【发布时间】:2019-02-27 10:10:13
【问题描述】:

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

条目:

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

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

  • 类型 = 'FOO' AND 值 > 500
  • 值 > 100

【问题讨论】:

  • 你用的是什么版本的 Postgres?
  • @TimBiegeleisen 10+

标签: postgresql jsonb database-indexes


【解决方案1】:

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

CREATE INDEX ON tabname USING gin (jsonbcol jsonb_path_ops);

这可以被如下查询使用:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多