Thread: recreating table and foreign keys
Hi I use Postgresql 7.2.2. Sometimes I have to remove a column from my tables (psql): 1. alter table master_table rename to x; 2. \i tables.sql 3. insert into master_table select f1,f2,... from x 4. drop table x I think, foreign keys referring from detail_table(s) to master_table have gone. How to recreate foreign keys? I want to keep my database in better integrity, than now... Tomasz Myrta
On Tue, 3 Dec 2002, Tomasz Myrta wrote: > Hi > I use Postgresql 7.2.2. > Sometimes I have to remove a column from my tables (psql): > 1. alter table master_table rename to x; > 2. \i tables.sql > 3. insert into master_table select f1,f2,... from x > 4. drop table x > > I think, foreign keys referring from detail_table(s) to master_table > have gone. > How to recreate foreign keys? I want to keep my database in better > integrity, than now... You'll probably end up using ALTER TABLE ADD CONSTRAINT to add the constraints to the new master_table. It's possible that you might be able to hack something with the system tables, but that sounds dangerous. Or you can upgrade to 7.3 which lets you run alter table drop column. :)
> You'll probably end up using ALTER TABLE ADD CONSTRAINT to add the > constraints to the new master_table. It's possible that you might > be able to hack something with the system tables, but that sounds > dangerous. Or you can upgrade to 7.3 which lets you run alter table > drop column. :) If it is the only way, I can create >20 "alter table add constraint...", but is rather a boring finish :-( I found, I can dump database - data only. After this I can create all tables and restore data. Any other solution? Tomasz Myrta
On Tue, 3 Dec 2002, Tomasz Myrta wrote: > > You'll probably end up using ALTER TABLE ADD CONSTRAINT to add the > > constraints to the new master_table. It's possible that you might > > be able to hack something with the system tables, but that sounds > > dangerous. Or you can upgrade to 7.3 which lets you run alter table > > drop column. :) > If it is the only way, I can create >20 "alter table add constraint...", but > is rather a boring finish :-( > I found, I can dump database - data only. After this I can create all tables > and restore data. Yeah, dump and restore is generally a pretty big thing though. > Any other solution? You might be able to write a function that would duplicate constraints from the table you want to dispose of to the new table, but it might be hairy. If you do this alot, you might want to upgrade to 7.3 (which requires one dump and reload).