Ответ
Да, в PostgreSQL можно делать рекурсивные запросы с помощью WITH RECURSIVE. Это полезно для работы с иерархическими данными, например, деревьями или графами.
Пример: поиск всех подчиненных сотрудника в иерархии:
WITH RECURSIVE employee_hierarchy AS (
SELECT id, name, manager_id
FROM employees
WHERE id = 1 -- начальный сотрудник
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e
JOIN employee_hierarchy eh ON e.manager_id = eh.id
)
SELECT * FROM employee_hierarchy;
Ограничения:
- Должна быть условие выхода из рекурсии
- PostgreSQL ограничивает глубину рекурсии (по умолчанию 100)
- Может быть неэффективным для больших деревьев