让我们假设我有一个自引用分层表构建像这样的经典方式:
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
我现在需要的是一个函数(最好是纯 sql),它将获取测试记录的 id 并克隆所有附加记录(包括给定的记录)。克隆的记录当然需要有新的 id。例如,期望的结果是这样的:
Select * from cloningfunction(2);
name | id | parent_id
-----------+----+-----------
root2 | 7 |
root2sub1 | 8 | 7
root2sub2 | 9 | 7
任何指针?我使用的是 PostgreSQL 8.3。