Общие табличные выражения - это конструкции начинающиеся с WITH Есть таблица categories с полями id, name, parent_id (null если нет родительской категории) WITH RECURSIVE category_hierarchy AS ( -- Базовый случай: выбор всех категорий без родителей
SELECT
id,
name as parent,
name,
ARRAY[id]::BIGINT[] AS ids, -- массив идентификаторов категорий
ARRAY[]::VARCHAR[] AS names, -- массив названий категорий
1 AS level
FROM categories
WHERE parent_id IS NULL
UNION ALL
-- Рекурсивный случай: выбор дочерних категорий
SELECT
c.id,
ch.parent,
c.name,
ch.ids || c.id, -- добавляем текущий id к массиву
ch.names || c.name, -- добавляем текущее имя к массиву
ch.level + 1
FROM categories c
JOIN category_hierarchy ch ON c.parent_id = ch.id
)
SELECT
id,
parent,
name,
ids,
names,
level
FROM category_hierarchy;
А тут разместим все категории по отдельным столбцам, жёстко прописав максимальный