用 PostgreSQL 的 jsonb 的 @> 同时查询多个键值对是否是合法的?

下面这条语句返回的是 true:

SELECT
'{"tags": ["ACG", "Trance", "日本"], "artists":["a","b","c"],"year": 2000}'::jsonb
@>
'{"tags": ["ACG", "Trance"], "artists":["a","b"],"year": 2000}'::jsonb;

我没在官方文档里看到类似的用法,不太敢用,我怕是我卡了一个 BUG。我问了 DeepSeek,它说文档一般不会介绍那么细,不太敢信。

阅读 883
1 个回答

1.@>是包含关系操作符,不是查询
2.你的写法只要遵循jsonb语法,官方文档没有写,放心用就行,但是你要搞清楚,你这个版本的jsonb的支持程度。不放心的话,搞个语句在线上环境测试一下,看下执行计划,你想查询多个键值对,应该是

SELECT *
FROM my_table
WHERE data @> '{"tags": ["ACG", "Trance"], "artists":["a","b"],"year": 2000}'::jsonb;

这个语句是说左边如果是数组要包含右边的所有元素,如果是值要相等

推荐问题