from 2 keys to serial - Mailing list pgsql-general

From Ivan Sergio Borgonovo
Subject from 2 keys to serial
Date
Msg-id 20081214201635.0898e22d@dawn.webthatworks.it
Whole thread Raw
Responses [SOLVED] Re: from 2 keys to serial
List pgsql-general
I've to import something whose schema looks like

create table user(
  userid serial primary key,
);

create table adresses_source(
  userid int references user(userid),
  addressid int
);

where addressid are a sequence for each userid as:

1,1
1,2
1,3
2,1
2,2
3,1
4,1
4,2
4,3

to something that should be like

create table adresses_destination(
  userid int references user(userid),
  addressid serial primary key
);

Currently I was using a temp table

create table adresses_temp(
  userid int references user(userid),
  addressid int,
  newaddressid serial primary key
);

and then simply copy to the final destination.

But then I need to sync sequences since filling adresses_destination
from adresses_temp doesn't increment the sequence.

I need some kind of temp table since I need to keep the relationship
between

adresses_source.(userid, addressid) -> adresses_destination.addressid

since I've to deal with other related tables.

Syncing between sequences happens

select setval('sequence_of_addresses_dest',
currval('sequence_of_addresses_temp'));

sort of...

but the above select is far from being elegant and fail if no rows
were inserted.

I'd bet that the problem of transforming 2 keys into a serial is
pretty common and I'm asking for any alternative more elegant way
than the above.

thanks

--
Ivan Sergio Borgonovo
http://www.webthatworks.it


pgsql-general by date:

Previous
From: Karsten Hilbert
Date:
Subject: how to find foreign key details (column, that is)
Next
From: Tom Lane
Date:
Subject: Re: how to find foreign key details (column, that is)