【问题标题】:How to index JSON data in PostgreSQL 9.2?如何在 PostgreSQL 9.2 中索引 JSON 数据?
【发布时间】:2012-09-16 13:59:31
【问题描述】:

有人知道如何在 PostgreSQL 9.2 中为 JSON 数据创建索引吗?

示例数据:

[
  {"key" : "k1", "value" : "v1"},
  {"key" : "k2", "value" : "v2"}
]

如果我想对所有键进行索引该怎么做?

谢谢。

【问题讨论】:

  • 您存储纯 JSON 而不是分成表列是否有原因?以及您不接受答案的任何原因?
  • 我正在评估 JSON 类型是否支持 PostgreSQL 9.2,因此需要。我没有看到禁用接收答案的设置?有类似的吗?

标签: json postgresql indexing postgresql-9.2


【解决方案1】:

目前没有直接索引 JSON 的内置函数。但是您可以使用基于函数的索引来实现,其中函数是用 JavaScript 编写的。

详情请看这篇博文:http://people.planetpostgresql.org/andrew/index.php?/archives/249-Using-PLV8-to-index-JSON.html

还有一篇博客文章讨论了 JSON 以及它如何与 JavaScript 一起使用:http://www.postgresonline.com/journal/archives/272-Using-PLV8-to-build-JSON-selectors.html

【讨论】:

  • 但在我的情况下 - 我需要索引 json 对象中的所有内容。有没有办法做到这一点?
  • @ankurvsoni:不,我不这么认为。
  • 请注意,从 9.3 开始有JSON Functions and Operators
【解决方案2】:

至少现在,将 hstore 用于索引字段会更好。

CREATE INDEX table_name_gin_data ON table_name USING GIN(data);

如果您对全文搜索感兴趣,也可以创建 GIST 索引。更多信息在这里:http://www.postgresql.org/docs/9.0/static/textsearch-indexes.html

【讨论】:

    【解决方案3】:

    这个问题有点老了,但我认为选择的答案并不是理想的答案。要索引 json(json 文本中的属性值),我们可以使用带有 PLV8 的表达式索引(由 @a_horse_with_no_name 建议)。

    Craig Kerstein 在解释/演示方面做得很好:

    http://www.craigkerstiens.com/2013/05/29/postgres-indexes-expression-or-functional-indexes/

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 2015-07-08
      • 2013-03-24
      • 1970-01-01
      相关资源
      最近更新 更多