【发布时间】:2021-08-16 22:56:20
【问题描述】:
这是我的query,它有效。我将字典列表存储在我的 jsonb 列中。
SELECT
items.title
FROM
items
WHERE
jsonb_path_exists(items.types::jsonb, '$[*] ? (@.target == "discount")')
没有jsonb_path_exists()函数有没有办法写这个?
另外,JSON 处理函数是否使用索引?
我想简化查询的可读性/外观,因为它太长了。并且好奇我是否可以通过不使用 JSON 处理函数来获得任何性能改进。
我尝试用@? 替换它,但失败了。 This is what I used (quote from PostgreSQL):
jsonb@? jsonpath → 布尔值
JSON 路径是否返回指定 JSON 值的任何项目?
'{"a":[1,2,3,4,5]}'::jsonb @? '$.a[*] ? (@ > 2)' → t
非常感谢任何帮助。
【问题讨论】:
-
“JSON 处理函数是否使用索引?” - 您引用的页面还写道“Section 8.14.4 描述了如何使用这些运算符来有效地搜索索引的 jsonb 数据” .
-
"我尝试将其替换为
@?,但失败了" - 请同时向我们展示您尝试过的查询。它是如何失败的? -
你为什么要把专栏投到
jsonb开始?如果它被定义为jsonb,则强制转换是无用的(您可以通过删除它来缩短查询)。如果它是json(或者更糟糕的text),那么您应该将其转换为jsonb,这样您就不需要在任何地方进行强制转换,并且索引更容易定义(和使用)
标签: postgresql postgresql-13 postgresql-json