如何查询PostgreSQL 9.5 JSONB列中是否存在密钥?

时间:2016-01-29 05:55:33

标签: sql json postgresql operators jsonb

我有一个PostgreSQL 9.5数据库表,其中包含名为attrs的JSONB列。我想检查该attires列中是否存在特定键。我想我可以使用?运算符,但我不理解语法。

SELECT * FROM cereal WHERE attrs ? 'lbs';

返回"心灵参数的数量<参数标记的数量。"

SELECT * FROM cereal WHERE attrs ? | ARRAY['lbs'];

返回"心灵参数的数量<参数标记的数量。"

如何查询JSONB列中是否存在密钥?

2 个答案:

答案 0 :(得分:0)

您实际上是第一次查询。

?运算符的限制是它只检查jsonb值的顶级键。因此,您正在寻找的密钥很可能会隐藏在JSON文档的更深处。您可以使用多个jsonb运算符或处理函数深入到键所在的位置,然后进行测试:->#>jsonb_each()jsonb_array_elements()等。因此,您可以使用其中任何一个并在结果上运行?运算符,例如:

SELECT *
FROM cereal
WHERE (attrs -> 'weight') ? 'lbs';

...对于JSON文档,例如:

{"ingredients": {...}, "weight": {"lbs": 4, "kg": 1.8}, ...}

在不了解JSON文档结构的情况下,您无法获得更具体的答案。

答案 1 :(得分:0)

这不是postgresql错误。你的查询没问题。错误是你无论你使用什么来运行该查询都会让?混淆参数占位符,你必须修改你尝试运行查询的方式而你没有提供足够的信息来给你一个提示。