从Postgres JSONB列中提取值

时间:2015-12-04 16:32:07

标签: json postgresql jsonb

我在表metrics中有一个名为events的JSONB列。它将各种度量存储为平面散列,例如

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

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

2 个答案:

答案 0 :(得分:2)

为此目的使用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)

答案 1 :(得分:1)

在横向联接中使用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)