【问题标题】:Extract values from Postgres JSONB column从 Postgres JSONB 列中提取值
【发布时间】:2016-03-09 15:52:08
【问题描述】:

我在表 events 中有一个名为 metrics 的 JSONB 列。它将各种指标存储为平面哈希,例如

{"m1": 123, "m2": 122.3, "m3": 32}  

我想提取存储在该列中的所有。可能吗?我找到了一个函数jsonb_object_keys(jsonb),但我没有找到任何类似的值。

【问题讨论】:

  • 有几个json & jsonb functions 可用于此目的。选择哪一个取决于您的具体情况。
  • 谢谢,我想计算这个 json 的最小值并选择所有最小值高于某个阈值的记录。我尝试了您链接的功能,但未能实现我想要的功能。你知道怎么做吗?

标签: json postgresql jsonb


【解决方案1】:

为此目的使用jsonb_each()

WITH json_test(data) AS ( VALUES
  ('{"m1": 123, "m2": 122.3, "m3": 32}'::JSONB)
)
SELECT element.value 
FROM json_test jt, jsonb_each(jt.data) as element;

输出:

 value 
-------
 123
 122.3
 32
(3 rows)

【讨论】:

    【解决方案2】:

    在横向连接中使用jsonb_each()

    with val as (
        select '{"m1": 123, "m2": 122.3, "m3": 32}'::jsonb js
        )
    select key, value
    from val,
    lateral jsonb_each(js);
    
     key | value 
    -----+-------
     m1  | 123
     m2  | 122.3
     m3  | 32
    (3 rows)    
    

    【讨论】:

      【解决方案3】:

      使用json_each,您可以通过以下方式提取值:

      SELECT value FROM json_each('{"m1": 123, "m2": 122.3, "m3": 32}')
      

      输出

      value
      -----
      123
      122.3
      32
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-20
        • 2019-01-23
        • 1970-01-01
        • 2017-06-23
        • 2020-10-14
        • 1970-01-01
        • 2020-09-16
        • 1970-01-01
        相关资源
        最近更新 更多