【问题标题】:Queries with OR operator on JSONB column在 JSONB 列上使用 OR 运算符进行查询
【发布时间】:2017-08-21 05:43:40
【问题描述】:

我在 users 表上有一个名为 metadata 的 JSONB 列。我想获取 metadata->a->b 为 5、6 或 7 的用户。我可以这样做:

SELECT * FROM users 
WHERE metadata @> '{"a": {"b": 5}}' 
   OR metadata @> '{"a": {"b": 6}}' 
   OR metadata @> '{"a": {"b": 7}}'; --etc.

有没有更有效的方法来进行这样的查询? JSONB 的 IN 之类的?

【问题讨论】:

  • (metadata->'a'->'b')::int in (5,6,7) 不起作用?

标签: postgresql jsonb postgresql-9.5


【解决方案1】:
... WHERE metadata->'a'->>'b' IN (5, 6, 7)

您可以在可能帮助的表达式上创建 B-tree 索引:

CREATE INDEX ON users ((metadata->'a'->>'b'));

【讨论】:

  • 好的,谢谢。关于您的旁注,我应该创建什么样的索引? GIN 索引是针对整个 JSONB 列的,我只需要创建一个“经典”索引?
  • 我已经扩展了答案以涵盖这一点。
猜你喜欢
  • 2022-11-21
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 2017-07-08
  • 1970-01-01
相关资源
最近更新 更多