【问题标题】:How to query the existence of a key in PostgreSQL 9.5 JSONB column?如何查询 PostgreSQL 9.5 JSONB 列中是否存在键?
【发布时间】:2016-01-29 05:55:32
【问题描述】:

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

SELECT * FROM cereal WHERE attrs ? 'lbs';

这将返回,“有意识的参数的数量

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

这将返回,“有意识的参数的数量

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

【问题讨论】:

  • 你是如何运行查询的?

标签: sql json postgresql operators jsonb


【解决方案1】:

您的第一个查询实际上是正确的。

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

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

...对于像这样的 JSON 文档:

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

如果不了解 JSON 文档的结构,您将无法获得更具体的答案。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢您的提示。我将在 psequel 上提交一个错误,这是我用来运行查询的。
    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2015-10-15
    相关资源
    最近更新 更多