Как отобразить ltree в nested set PostgreSQL?

Добрый день.

Есть таблица с ltree-структурой и ей нужно перевести в nested set.

StructureLtree(id INT PRIMARY KEY, value TEXT, path ltree);
    
    -- Данные:

    pk |  value  |  path  |
    0  |   'A'   |   ''   |
    0  |   'B'   |   '1'  |
    0  |   'C'   |   '2'  |
    0  |   'D'   |  '1.3' |
    0  |   'E'   |  '1.4' |
    0  |   'F'   |  '1.5' |
    0  |   'G'   |  '2.6' |
    0  |   'H'   |  '2.7' |


StructureSets(id INT PRIMARY KEY, value TEXT, lft INT, rgt INT);

, где левая и правая граница узла соответствует правилам определения вложенного множества.
То есть на выходе получить что-то вроде
-- Данные:

    pk |  value  |  lft  |  rgt  |
    0  |   'A'   |   1   |   16  |
    1  |   'B'   |   2   |   9   |
    2  |   'C'   |   10  |   15  |
    3  |   'D'   |   3   |   4   |
    4  |   'E'   |   5   |   6   |
    5  |   'F'   |   7   |   8   |
    6  |   'G'   |   11  |   12  |
    7  |   'H'   |   13  |   14  |


Может кто-нибудь подсказать идею?
  • Вопрос задан
  • 401 просмотр
Пригласить эксперта
Ответы на вопрос 1
@aol-nnov
Есть клёвый дядька на просторах интернетов - Bill Karwin. Он писал про укладывание разных деревьев в реляционные таблицы.
А еще у него книга есть "SQL Antipatterns. Avoiding the Pitfalls of Database Programming" там про деревья тоже есть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы