我有一个 PostgreSQL 9.5 数据库表,其中有一个名为 attrs 的 JSONB 列。我想检查该 attires 列中是否存在特定键。我想我可以使用?运算符,但我不明白语法。
SELECT * FROM cereal WHERE attrs ? 'lbs';
这将返回,“注意参数的数量 < 参数标记的数量。”
SELECT * FROM cereal WHERE attrs ? | ARRAY['lbs'];
这将返回,“注意参数的数量 < 参数标记的数量。”
如何查询 JSONB 列中是否存在键?
最佳答案
您实际上已经找到了您的第一个查询。
?
运算符的局限性在于它仅检查 jsonb
值的顶级键。因此,您要查找的 key 很可能深埋在 JSON 文档中的某处。您可以使用多个 jsonb
运算符或处理函数来向下钻取键应该位于的位置,然后进行测试:->
, # >
、jsonb_each()
或 jsonb_array_elements()
等。因此,您使用其中任何一个并对结果运行 ?
运算符,例如:
SELECT *
FROM cereal
WHERE (attrs -> 'weight') ? 'lbs';
...对于像这样的 JSON 文档:
{"ingredients": {...}, "weight": {"lbs": 4, "kg": 1.8}, ...}
如果不了解 JSON 文档的结构,您将无法获得更具体的答案。
关于sql - 如何查询 PostgreSQL 9.5 JSONB 列中是否存在某个键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35077818/