Problem merging two rows into same primary key

From: Patrik Kudo <kudo(at)pingpong(dot)net>
To: pgsql-general(at)postgresql(dot)org
Subject: Problem merging two rows into same primary key
Date: 2005-05-23 14:40:12
Message-ID: 4291EB4C.1080908@pingpong.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi!

I've got a problem I can't seem to find an answer to. The problem is
simplified by this example:

1. We have two tables:

create table asdf (id serial primary key,
data text);
create table qwert (id serial,
data integer references asdf
on delete cascade on update cascade);

2. We populate both tables with the following result:

keytest=# select * from asdf;
id | data
----+------
1 | asdf
2 | asd2
3 | asd3
4 | asd4
(4 rows)

keytest=# select * from qwert;
id | data
----+------
1 | 2
2 | 4
(2 rows)

Now to the problem. We want to merge rows with id = 2 and id = 4 into id
= 1 in the asdf table with the qwert table beeing updated to reflect the
change. The desired result would yeild:

keytest=# select * from asdf;
id | data
----+------
1 | asdf
3 | asd3
(2 rows)

keytest=# select * from qwert;
id | data
----+------
1 | 1
2 | 1
(2 rows)

I find no way to do this because the primary/foreign keys that would
make this easy actually makes it impossible. Are there any smart way to
do this or do I need to drop the primary key (hence also drop the
foreign keys since the drop will cascade), update the data manually and
then recreate the constraints? I hope there's an easier way beacuase in
the real scenario we're dealing with nearly 100 tables depending on that
single one with the primary key...

Thanks in advance,
Patrik Kudo

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2005-05-23 14:50:12 Re: How to recover from : "Cache lookup failed for rela tion "
Previous Message Phil Thornhill 2005-05-23 14:25:38 Re: Postgresql .NET Data Provider for Visual Studio 2005