From: | greg(at)turnstep(dot)com |
---|---|
To: | pgsql-patches(at)postgresql(dot)org |
Subject: | FAQ addition: deleteing all but one unique row |
Date: | 2003-02-10 15:12:36 |
Message-ID: | 7dfd5822386973554f04482728eed580@biglumber.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-patches |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
NotDashEscaped: You need GnuPG to verify this message
Small inline patch to address a frequently asked question about how
to delete all-but-one unique rows.
--
Greg Sabino Mullane greg(at)turnstep(dot)com
PGP Key: 0x14964AC8 200302101008
Index: FAQ.html
===================================================================
RCS file: /projects/cvsroot/pgsql-server/doc/src/FAQ/FAQ.html,v
retrieving revision 1.164
diff -c -r1.164 FAQ.html
*** FAQ.html 2002/12/05 05:47:44 1.164
--- FAQ.html 2003/02/10 15:08:00
***************
*** 139,144 ****
--- 139,145 ----
temporary tables in PL/PgSQL functions?<BR>
<A href="#4.27">4.27</A>) What replication options are available?<BR>
<A href="#4.28">4.28</A>) What encryption options are available?<BR>
+ <A href="#4.29">4.29</A>) How can I delete all but one identical row?<BR>
<H2 align="center">Extending PostgreSQL</H2>
***************
*** 1381,1386 ****
--- 1382,1406 ----
<I>PASSWORD_ENCRYPTION</I> in <I>postgresql.conf</I>.</LI>
<LI>The server can run using an encrypted file system.</LI>
</UL>
+
+ <H4><A name="4.29">4.29</A>) How can I delete all but one identical row?<BR>
+ </H4>
+ <P>Sometimes you have rows that are so identical that a simple WHERE clause cannot
+ distinguish them apart. Each row always has a unique system column named
+ <CODE><SMALL>ctid</SMALL></CODE> that can be used to differentiate them. Use
+ <SMALL>LIMIT 1</SMALL> to get back the ctid of one of the identical rows,
+ then remove all matching rows except the one with that particular ctid:</P>
+ <PRE>
+ DELETE FROM mytable WHERE ctid !=
+ (SELECT ctid FROM mytable WHERE id=12 LIMIT 1);
+ </PRE>
+
+ <P>In the above example, all rows in the table named 'mytable' having a value
+ of 12 in the 'id' column will be deleted except for one. Exactly
+ which row is kept should not matter, as they are all otherwise identical.
+ The system column <CODE><SMALL>oid</SMALL></CODE> can also be used, but
+ because tables can be created without an oid column, the use of ctid
+ is preferred.</P>
<HR>
-----BEGIN PGP SIGNATURE-----
Comment: http://www.turnstep.com/pgp.html
iD8DBQE+R8BsvJuQZxSWSsgRAtyCAKCyjwFyjJuy92ayfIpci7roRTgfOQCgsqJo
zoVZu5Qh++1ryvZFclrl8Dc=
=Xw0Z
-----END PGP SIGNATURE-----
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2003-02-10 15:25:36 | Re: FAQ addition: deleteing all but one unique row |
Previous Message | Oleg Drokin | 2003-02-08 17:32:17 | trivial patch for pg_dump blob problem |