我在jsonb存储地图时有一列,就像{'a':1,'b':2,'c':3}每一行的键数不同。
jsonb
{'a':1,'b':2,'c':3}
我想算一下-jsonb_object_keys可以检索密钥,但是它在 setof
setof
有这样的东西吗?
(select count(jsonb_object_keys(obj) from XXX )
(这将无法用作ERROR: set-valued function called in context that cannot accept a set)
ERROR: set-valued function called in context that cannot accept a set
Postgres JSON函数和运算符文档
json_object_keys(json) jsonb_object_keys(jsonb) setof text Returns set of keys in the outermost JSON object. json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}') json_object_keys ------------------ f1 f2
交叉表不可行,因为密钥数量可能很大。
您可以将键转换为数组,并使用array_length获得此信息:
select array_length(array_agg(A.key), 1) from ( select json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}') as key ) A;
如果需要在整个表中使用它,则可以按主键进行分组。