add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
select version();

create table my_table (
id_module int,
id_parent_module int,
module_code text,
name_module text,
desc_module text
);

with indata as (
select '[
{
"id_module": 1,
"id_parent_module": null,
"module_code": "001.",
"name_module": "Atoridad Fiscal",
"desc_module": "Atoridad Fiscal",
"children": [{
"id_module": 2,
"id_parent_module": 1,
"module_code": "001.002",
"name_module": "Recibidos",
"desc_module": "Recibidos"
},
{
"id_module": 3,
"id_parent_module": 1,
"module_code": "001.003.",
"name_module": "Enviados",
"desc_module": "Enviados"
},
{
"id_module": 4,
"id_parent_module": 1,
"module_code": "001.004.",
version
PostgreSQL 14.10 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-20), 64-bit
SELECT 1
CREATE TABLE
INSERT 0 10
select * from my_table;

with chilluns as (
select id_parent_module,
jsonb_agg(to_jsonb(my_table) order by id_module) as children
from my_table
where id_parent_module is not null
group by id_parent_module
), rents as (
select p.*, c.children
from my_table p
join chilluns c on c.id_parent_module = p.id_module
)
select jsonb_pretty(jsonb_agg(to_jsonb(rents) order by id_module)) as result
from rents;
id_module id_parent_module module_code name_module desc_module
1 null 001. Atoridad Fiscal Atoridad Fiscal
2 1 001.002 Recibidos Recibidos
3 1 001.003. Enviados Enviados
4 1 001.004. Archivados Archivados
5 null 005. Configuraciones Configuraciones
6 null 006. Mensajes Bandeja del contribuyente
7 6 006.007. Recibidos Recibidos
8 6 006.008. Enviados Enviados
14 5 005.14. Medios Contacto Medios Contacto
22 6 006.0022. Buscador de Mensajes Buscador de Mensajes
SELECT 10
result
[
    {
        "children": [
            {
                "id_module": 2,
                "desc_module": "Recibidos",
                "module_code": "001.002",
                "name_module": "Recibidos",
                "id_parent_module": 1
            },
            {
                "id_module": 3,
                "desc_module": "Enviados",
                "module_code": "001.003.",
                "name_module": "Enviados",
                "id_parent_module": 1
            },
            {
                "id_module": 4,
                "desc_module": "Archivados",
                "module_code": "001.004.",
                "name_module": "Archivados",
                "id_parent_module": 1
            }
        ],
        "id_module": 1,
        "desc_module": "Atoridad Fiscal",
        "module_code": "001.",
        "name_module": "Atoridad Fiscal",
        "id_parent_module": null
    },
    {
        "children": [
            {
                "id_module": 14,
                "desc_module": "Medios Contacto",
                "module_code": "005.14.",
                "name_module": "Medios Contacto",
                "id_parent_module": 5
            }
        ],
        "id_module": 5,
        "desc_module": "Configuraciones",
        "module_code": "005.",
        "name_module": "Configuraciones",
        "id_parent_module": null
    },
    {
        "children": [
            {
                "id_module": 7,
                "desc_module": "Recibidos",
                "module_code": "006.007.",
                "name_module": "Recibidos",
                "id_parent_module": 6
            },
            {
                "id_module": 8,
                "desc_module": "Enviados",
                "module_code": "006.008.",
                "name_module": "Enviados",
                "id_parent_module": 6
            },
            {
                "id_module": 22,
                "desc_module": "Buscador de Mensajes",
                "module_code": "006.0022.",
                "name_module": "Buscador de Mensajes",
                "id_parent_module": 6
            }
        ],
        "id_module": 6,
        "desc_module": "Bandeja del contribuyente",
        "module_code": "006.",
        "name_module": "Mensajes",
        "id_parent_module": null
    }
]
SELECT 1