У меня есть следующая таблица:
CREATE TABLE tree_node (
id serial primary key,
name character varying(255),
parent_id integer references tree (id)
);
Таблица содержит много деревьев с количеством узлов до 1000.
(я могу запросить дерево и его потомки эффективно с помощью рекурсивного запроса).
Однако мне нужно иметь возможность скопировать отдельное дерево за одну операцию . Скажем, у меня есть дерево с 3 узлами, идентификаторы 1,2,3 (это потенциально большое дерево). Я хотел бы сделать его копию, т.е. создать новые узлы с новыми идентификаторами. (Здесь скопированное дерево с идентификаторами 4,5,6):
id | name | parent_id
----+-----------------+-----------
1 | NodeA |
2 | NodeA.1 | 1
3 | NodeA.1.1 | 2
4 | NodeA(copy) |
5 | NodeA.1(copy) | 4
6 | NodeA.1.1(copy) | 5
Есть ли способ скопировать дерево и его потомков более эффективно, чем вставка каждого узла дерева отдельно (поскольку необходим новый parent_id)