Re: restore/dup OIDs HELP! - Mailing list pgsql-admin

From Jack Flak
Subject Re: restore/dup OIDs HELP!
Date
Msg-id GnaT9.1567$Ca7.147782856@newssvr13.news.prodigy.com
Whole thread Raw
In response to Re: restore/dup OIDs HELP!  (Steve Crawford <scrawford@pinpointresearch.com>)
List pgsql-admin
Steve,

Thanks for the excellent suggestion!

Yes, that would have worked.  I guess I did it the hard way.  I wrote a
nice little perl script to locate the dups by OID and then pull the data,
re-insert it, and then delete the original dup by OID.  It was smart, I
could run it as many times as needed and it would not have touched any
entry which was not dupped.

This is the SQL soltuion to such a problem.  Thanks for the help!


Steve Crawford wrote:

> Would this work for you (if you can muck with the comm table temporarily
> without causing problems)?
>
> --Create a table with unique values
> create temporary table communique as select distinct * from comm;
>
> --Empty the table
> delete from comm;
> (or truncate comm if recent enough version or drop and recreate comm if
> it's really large and an older version of PostgreSQL)
>
> --Repopulate comm from commtemp
> insert into comm select * from commtemp;
>
> Cheers,
> Steve
>
> On Saturday 04 January 2003 10:30 pm, Jack Flak wrote:
>> Greetings Group,
>>
>> I'm running 7.1.
>>
>> Basically, my question is this:  how do I delete an exact dup without
>> deleting the original?
>>
>> Let me explain...
>>
>> I just accidentally ran a restore on my perfectly running database. When
>> I originally made the dump file, I had OIDs turned on. I figured they
>> were unique. Now, after the restore is done, I see that they are not.
>>
>> So now I have duplicate entries in a large table. They are duplicate all
>> the way down to the OIDs!  I was stupid enough not to set a unique key
>> field for this table when I designed it, so the system accepted the "new"
>> entries with the exact same OIDs as already existed. However, almost all
>> of my other tables do have unique keys set, so the dups were rejected.
>> Check out my stupidity:
>>
>>
>> # SELECT oid, sender, length(text), date_submitted  FROM comm  ORDER BY
>> sender, date_submitted  LIMIT 20;
>>   oid  | sender | length |     date_submitted
>> -------+--------+--------+------------------------
>>  61385 | 132    |   2179 | 2001-02-23 16:43:00-08
>>  61385 | 132    |   2179 | 2001-02-23 16:43:00-08
>>  61386 | 132    |   1313 | 2001-02-25 17:40:00-08
>>  52234 | 154    |   2073 | 2001-05-07 23:40:00-07
>>  52234 | 154    |   2073 | 2001-05-07 23:40:00-07
>>  49588 | 168    |   3063 | 2002-03-20 12:04:00-08
>>  49588 | 168    |   3063 | 2002-03-20 12:04:00-08
>>  49592 | 168    |   5243 | 2002-03-26 10:54:00-08
>>  49592 | 168    |   5243 | 2002-03-26 10:54:00-08
>>  49801 | 188    |   1010 | 2000-08-22 12:30:00-07
>>  49801 | 188    |   1010 | 2000-08-22 12:30:00-07
>>  49802 | 188    |    307 | 2000-08-22 12:37:00-07
>>  49802 | 188    |    307 | 2000-08-22 12:37:00-07
>>  49803 | 188    |   1790 | 2000-08-22 12:39:00-07
>>  49803 | 188    |   1790 | 2000-08-22 12:39:00-07
>>  49804 | 188    |    531 | 2000-08-22 12:41:00-07
>>  49804 | 188    |    531 | 2000-08-22 12:41:00-07
>>  49805 | 188    |   4700 | 2000-08-22 12:45:00-07
>>  49805 | 188    |   4700 | 2000-08-22 12:45:00-07
>>  49809 | 188    |   2855 | 2000-08-22 12:47:00-07
>> (20 rows)
>>
>>
>> The 'sender' field, plus the 'date_submitted' field are used as "the key"
>> for each entry.
>> If you're sharp, you'll notice that for 'sender' 132, there are three
>> total, one dup.  This is because I tried to delete one of the dups.  This
>> was a mistake, as BOTH were deleted.  I re-added it again from the dump
>> file manually (boy, that was really not fun).
>>
>> So, once again, here's my question:  how do I go about deleting the
>> duplicate entries WITHOUT also deleting the originals?
>>
>>
>>
>> ---------------------------(end of broadcast)---------------------------
>> TIP 3: if posting/reading through Usenet, please send an appropriate
>> subscribe-nomail command to majordomo@postgresql.org so that your
>> message can get through to the mailing list cleanly
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
>


pgsql-admin by date:

Previous
From: Jack Flak
Date:
Subject: Re: restore/dup OIDs HELP!
Next
From: Stephan Szabo
Date:
Subject: Re: restore/dup OIDs HELP!