PostgreSQL, LTree и массивы с рекурсивной вложенностью - PullRequest
0 голосов
/ 11 июля 2020

Учитывая следующую структуру таблицы:

CREATE TABLE employee (
  id INTEGER GENERATED ALWAYS AS IDENTITY,
  supervisor_path LTREE NOT NULL DEFAULT '',
  emp_path LTREE GENERATED ALWAYS AS (supervisor_path || id) STORED
  -- some additional fields omitted
)

правила следующие:

  • У каждого сотрудника ровно один руководитель или нет его.
  • Сотрудники без супервизор находится в NLEVEL(emp_path) = 0.

Как можно сделать представление, чтобы каждая строка содержала данные о сотрудниках и массив с людьми, которых они контролируют, чтобы элементы в массиве также вкладывались их подчиненных?

В представлении, которое я хотел бы иметь, каждая строка имеет дополнительное поле (supervises), которое представляет собой массив employee записей (каждая также имеет это поле ).

Я знаю, что мне, возможно, придется сделать это с помощью рекурсивного запроса, начиная с листьев дерева, но у меня есть некоторые проблемы с пониманием концепции (как это будет работать).

Спасибо за аванс на ваше рассмотрение.

...