powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как преобразовать adjacency list в ltree
3 сообщений из 3, страница 1 из 1
Как преобразовать adjacency list в ltree
    #39625431
Mogaba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,

есть таблица "departments" в PostgreSQL 9.6, которая хранит дерево в виде adjacency list, т.е. каждый узел ссылается на родительский в этой же таблице (-1 если узел корневой):

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
   id   |   name   |   parent_id
-----------------------------------
-1      | NULL     | -1
 1      | Dep_1    | -1
 2      | Dep_2    |  1
 3      | Dep_3    |  1
 4      | Dep_4    |  3
 5      | Dep_5    | -1



Нужно преобразовать ее в таблицу с типом "ltree", где в качестве меток будет использоваться поле id:

Код: html
1.
2.
3.
4.
5.
6.
7.
   id   |   name   |   path
------------------------------
1       | Dep_1    | 1
2       | Dep_2    | 1.2
3       | Dep_3    | 1.3
4       | Dep_4    | 1.3.4
5       | Dep_5    | 5



Как это можно сделать?
...
Рейтинг: 0 / 0
Как преобразовать adjacency list в ltree
    #39625778
Flashpoke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
WITH RECURSIVE rec AS
(
	SELECT id, "name" AS dname, id::text AS tree
	FROM old_table
	WHERE parent_id = -1
	UNION ALL
	SELECT t.id, t."name", tree || '.' || t.id::text  
	FROM rec
	JOIN old_table t ON t.parent_id = rec.id
	WHERE t.parent_id <> -1
)
INSERT INTO tree_table
SELECT id, dname, tree::ltree
FROM rec
WHERE id <> -1
ORDER BY id;
...
Рейтинг: 0 / 0
Как преобразовать adjacency list в ltree
    #39626024
Mogaba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Flashpoke,

спасибо, все работает.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как преобразовать adjacency list в ltree
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]