Можно ли делать рекурсивные запросы в PostgreSQL

«Можно ли делать рекурсивные запросы в PostgreSQL» — вопрос из категории Базы данных, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, в 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;

Ограничения:

  1. Должна быть условие выхода из рекурсии
  2. PostgreSQL ограничивает глубину рекурсии (по умолчанию 100)
  3. Может быть неэффективным для больших деревьев