【问题标题】:Select keys with boolean value true in PostgreSQL json query在 PostgreSQL json 查询中选择布尔值为 true 的键
【发布时间】:2020-05-21 17:16:16
【问题描述】:

在我的 PostgreSQL 11.6 表中,我有一个 json 字段 app_settings,其中包含以下格式的数据:

{
   "my_app": {
      "features": {
         "very_good_feature": true,
         "awesome_feature": false,
         "even_better_feature": true
      }
   }
}

我想创建一个查询来选择特征名称的列表,其中特征的值为true。所以在上面的例子中,我希望查询的结果是这样的 2 行:

  1. very_good_feature
  2. even_better_feature

我可以通过以下查询成功选择所有键:

select
    json_object_keys(app_settings ->'my_app' -> 'features') as k
from
    my_table;

如何编写 where 子句以仅列出以 true 为值的那些?

【问题讨论】:

    标签: json postgresql boolean where-clause


    【解决方案1】:

    试试json_each_text:

    select j.* from my_table
    join lateral json_each_text(app_settings->'my_app'->'features') j(k, v) on true
    where
    j.v = 'true'
    

    【讨论】:

    • 太棒了!那行得通。我很好奇,我可以从这个查询中获得什么样的性能?以允许更快查询的方式重新排列我的数据会更好吗?
    • 很高兴为您提供帮助!如果你的意思是重新排列,以一般 table/sql-ish 方式(而不是 json)保存数据,那么当然用它来操作,性能会更好
    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 2021-08-23
    • 2016-03-30
    • 2017-05-04
    • 2017-12-31
    • 1970-01-01
    • 2015-06-19
    • 2015-03-31
    相关资源
    最近更新 更多