У меня есть следующий JSON, хранящийся в столбце PostgreSQL (типа jsonb).
{
"entity": "Book",
"processes": [
{ "process": [
{ "processname": "Use",
"option": "none",
"processes": [
{ "process": [
{ "processname": "Lend",
"option": "*",
"processes": [
{ "process": [
{
"processname": "Borrow",
"option": "none"
}
]
},
.......
Я хочу получить список всех процессов вместе с их родительским процессом и уровнем. Примерно так
Processname Parent Level
Use {} 0
Lend Use 1
Borrow Lend,Use 2
Я написал следующий код, но он продолжает выполняться в течение длительного времени (бесконечно l oop) без вывода каких-либо результатов.
WITH RECURSIVE recursion AS (
SELECT process -> 'processname' as processname, '{}'::jsonb[] as parents, 0 as lvl
FROM test3, jsonb_array_elements(j-> 'processes') processes, jsonb_array_elements(processes-> 'process') process
UNION ALL
select process -> 'processname' as processname, parents || '{}'::jsonb[], lvl+1
FROM test3, jsonb_array_elements(j-> 'processes') processes, jsonb_array_elements(processes-> 'process') process
JOIN recursion p on process -> 'processname' = p.processname
WHERE not process -> 'processname' = any(parents)
)
SELECT *
FROM recursion;
Может кто-нибудь помочь мне?