Thread: recreating table and foreign keys

recreating table and foreign keys

From
"Tomasz Myrta"
Date:
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






Re: recreating table and foreign keys

From
Stephan Szabo
Date:
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. :)




Re: recreating table and foreign keys

From
"Tomasz Myrta"
Date:
> 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


Re: recreating table and foreign keys

From
Stephan Szabo
Date:
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).