我有一个名为slices
的表,其中包含一些简单的json对象,如下所示:
id | payload | metric_name
---|---------------------------------------|------------
1 | {"a_percent":99.97,"c_percent":99.97} | metric_c
2 | {"a_percent":98.37,"c_percent":97.93} | metric_c
这方面的许多记录。我想知道这个:
a_percent | c_percent
----------|----------
99.97 | 99.97
98.37 | 97.93
我正在创建该类型,并以下列方式使用json_populate_recordset
和json_agg
:
CREATE TYPE c_history AS(
"a_percent" NUMERIC(5, 2),
"c_percent" NUMERIC(5, 2)
);
SELECT * FROM
json_populate_recordset(
NULL :: c_history,
(
SELECT json_agg(payload::json) FROM slices
WHERE metric_name = 'metric_c'
)
);
子句select json_agg(...)
本身会产生一个很好的json对象数组,如预期的那样:
[{"a_percent":99.97,"c_percent":99.97}, {"a_percent":98.37,"c_percent":97.93}]
但是当我在json_populate_recordset
内运行时,我会得到Error : ERROR: must call json_populate_recordset on an array of objects
。
我做错了什么?
答案 0 :(得分:1)
您不需要使用json_agg
,因为您似乎希望在单独的a_percent
中获取c_percent
和id
个值记录。而只需按以下方式调用json_populate_recordset
:
SELECT id, (json_populate_record(null::c_history, payload)).* FROM slices
答案 1 :(得分:1)