我有一jsonb
列具有这样的用户权限(这是一条记录的值):
{
"user_1":{
"permissions":[
"edit",
"view"
]
},
"user_2":{
"permissions":[
]
},
"user_3":{
"permissions":[
"view"
]
}
}
我想要实现的是将此 jsonb 对象转换为 jsonb 对象数组,如下所示:
[
{
"login":"user_1",
"permissions":[
"edit",
"view"
]
},
{
"login":"user_2",
"permissions":[
]
},
{
"login":"user_3",
"permissions":[
"view"
]
}
]
只需将登录密钥“移动”到单独的字段并将其索引为数组。
问题是:
是否有可能在没有子查询的 PostgreSQL(版本 10.x)中做到这一点?
这是我的带有子查询的版本:
SELECT jsonb_agg(jsonb_build_object('login', tbl.key, 'permissions', tbl.value->'permissions')), id FROM (
SELECT (jsonb_each(permissions_tbl.permissions_obj)).*, id
FROM (
SELECT '{"user_1": {"permissions": ["edit", "view"]}, "user_2": {"permissions": []}, "user_3": {"permissions": ["view"]}}'::jsonb permissions_obj, 123 id
) as permissions_tbl
) as tbl GROUP BY id;
我用过jsonb_each
,jsonb_build_object
和jsonb_agg
。id
与permissions_obj
包含多个用户和权限有关。任何改进查询的建议都非常受欢迎。