This is a discussion on SQL tree duplication within the pgsql Sql forums, part of the PostgreSQL category; --> Hi, I have the following kind of sql structure, in 3 levels: ----------------------- create table documents ( id serial, ...
| |||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| Hi, I have the following kind of sql structure, in 3 levels: ----------------------- create table documents ( id serial, name varchar(50), primary key (id) ); create table lines ( id serial, name varchar(50), document_id integer, primary key (id), foreign key (document_id) references documents (id) ); create table line_details ( id serial, name varchar(50), line_id integer, primary key (id), foreign key (line_id) references lines (id) ); ----------------------- I'd like to be able to "duplicate" a document, with all of its lines and line details. Is there any easy way to do that with Postgresql? The only solution I can think of at the moment is to loop through all lines and line details, and replace foreign keys properly with values fetch with "currval". It should work just fine, but I was wondering if some advanced features of Postgresql could help in this situation. Regards, Philippe Lang ---------------------------(end of broadcast)--------------------------- TIP 5: don't forget to increase your free space map settings |
| ||||
| > Hi, > > I have the following kind of sql structure, in 3 levels: > > ----------------------- > create table documents ( > id serial, > name varchar(50), > primary key (id) > ); > > create table lines ( > id serial, > name varchar(50), > document_id integer, > primary key (id), > foreign key (document_id) references documents (id) > ); > > create table line_details ( > id serial, > name varchar(50), > line_id integer, > primary key (id), > foreign key (line_id) references lines (id) > ); > ----------------------- > > I'd like to be able to "duplicate" a document, with all of its lines and > line details. > > Is there any easy way to do that with Postgresql? The only solution I > can think of at the moment is to loop through all lines and line > details, and replace foreign keys properly with values fetch with > "currval". It should work just fine, but I was wondering if some > advanced features of Postgresql could help in this situation. You will have to do that in 3 steps (one for each table), but looping may not be necessary - just use INSERT ... SELECT ... syntax. Something like INSERT INTO Lines SELECT FROM Lines WHERE document_id = OLD_ID; But it depends on primary keys in the Lines and Line_details tables - if the primary keys are composed (and the document_id is part of them) then there is no problem with duplicities. Otherwise you'll have to solve it somehow, and looping may be necessary. Tomas ---------------------------(end of broadcast)--------------------------- TIP 7: You can help support the PostgreSQL project by donating at http://www.postgresql.org/about/donate |
| Thread Tools | |
| Display Modes | |
|
|