From: | Robert Treat <xzilla(at)users(dot)sourceforge(dot)net> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Cc: | "Albe Laurenz" <laurenz(dot)albe(at)wien(dot)gv(dot)at>, "Yi Zhao *EXTERN*" <yi(dot)zhao(at)alibaba-inc(dot)com> |
Subject: | Re: how to remove the duplicate records from a table |
Date: | 2008-10-10 22:30:11 |
Message-ID: | 200810101830.11763.xzilla@users.sourceforge.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Tuesday 07 October 2008 05:48:01 Albe Laurenz wrote:
> Yi Zhao wrote:
> > I have a table contains some duplicate records, and this table create
> > without oids, for example:
> > id | temp_id
> > ----+---------
> > 10 | 1
> > 10 | 1
> > 10 | 1
> > 20 | 4
> > 20 | 4
> > 30 | 5
> > 30 | 5
> > I want get the duplicated records removed and only one is reserved, so
> > the results is:
> > 10 1
> > 20 4
> > 30 5
> >
> > I know create a temp table will resolve this problem, but I don't want
> > this way:)
> >
> > can someone tell me a simple methold?
>
> Don't know if you'd call that simple, but if the table is
> called "t", you could do
>
> DELETE FROM t t1 USING t t2
> WHERE t1.id = t2.id AND t1.temp_id = t2.temp_id AND t1.ctid > t2.ctid;
>
note that one problem the delete from approaches have that the temp table
solutions dont is that you can end up with a lot of dead tuples if there were
a lot of duplicates... so if you can afford the locks, its not a bad idea to
do begin; lock table t1 in access exclsuive mode; create temp table x as
select ... from t1; truncate t1; insert into t1 select * from x; create
unique index ui1 on t1(...); commit; this way you're now unique table will
be nice and compacted, and wont get any more duplicate rows.
--
Robert Treat
Build A Brighter LAMP :: Linux Apache {middleware} PostgreSQL
From | Date | Subject | |
---|---|---|---|
Next Message | IJS/System - Joko | 2008-10-11 01:27:45 | Re: logging SQL statements |
Previous Message | Scott Marlowe | 2008-10-10 21:43:46 | Re: Re: [Pkg-postgresql-public] Postgres major version support policy on Debian |