Supposons que j'ai autoréférencement la table hiérarchique construire la voie classique comme celui-ci:des données hiérarchiques de clonage
CREATE TABLE test
(name text,id serial primary key,parent_id integer
references test);
insert into test (name,id,parent_id) values
('root1',1,NULL),('root2',2,NULL),('root1sub1',3,1),('root1sub2',4,1),('root
2sub1',5,2),('root2sub2',6,2);
testdb=# select * from test;
name | id | parent_id
-----------+----+-----------
root1 | 1 |
root2 | 2 |
root1sub1 | 3 | 1
root1sub2 | 4 | 1
root2sub1 | 5 | 2
root2sub2 | 6 | 2
Ce que je besoin est maintenant une fonction (de préférence en SQL) qui prendrait l'identifiant d'un dossier de test et cloner tous les enregistrements joints (y compris le dossier donné). Les enregistrements clonés doivent bien sûr avoir de nouveaux identifiants. Le résultat souhaité souhaite ceci par exemple:
Select * from cloningfunction(2);
name | id | parent_id
-----------+----+-----------
root2 | 7 |
root2sub1 | 8 | 7
root2sub2 | 9 | 7
Tous les pointeurs? Im en utilisant PostgreSQL 8.3.
Si je pouvais upvote deux fois, je le ferais ... Très bien! –
Je pense que le déclencheur doit mettre à jour tous les enregistrements enfants de la hiérarchie. Par exemple. si nous mettons à jour parent_id de l'enregistrement "root2" à 1, nous devons également mettre à jour les enregistrements "root2sub1" et "root2sub2". – Panos
C'est le chemin du chemin matérialisé ... très pratique –