Так как значение столбца равно многомерному массиву неправильной размерности, мы будем использовать рекурсивный запрос для поиска решения.
Ниже результата запроса в требуемом выводе вы хотите
Я заполнил ваши данные выборки в CTE.
with recursive cte(id,label,value,dims) as (
select
12345,
'Education'::text,
'[
[
{"label": "Type", "value": "Under Graduate"},
{"label": "Location", "value":"New Delhi"}
],
[
{"label": "Type", "value": "Post Graduate"}
]
]'::jsonb,
jsonb_array_length('[[{"label": "Type", "value": "Under Graduate"},{"label": "Location", "value": "New Delhi"}],[{"label": "Type", "value": "Post Graduate"}]]'::jsonb)
), res(id,label,val,dims) as (
select cte.id,cte.label,l.v,cte.dims-1
from cte,lateral(
select jsonb_array_elements(cte.value) as v
) l
union all
select
res.id,res.label,l.v,res.dims-1
from res,lateral(
select jsonb_array_elements(res.val) as v
) l
where
res.dims>0
)
select
res.id,
res.val->>'value' as value,
res.label ||
'_'||
(res.val->>'label')::text ||
'_' ||
row_number() over (partition by id,label,(res.val->>'label')::text) as label
from res
where dims=0