Thread: Primary Key Bugs
Somehow I have records in my database with duplicate primary keys. Because of this, I'm not able to update a lot of records, because Postgres then complains that I'm trying to insert a duplicate primary key. Can anyone suggest a way to select the duplicate ids out of the table so I can change them? I can't really do a SELECT DISTINCT on a 3GB database table or my machine would likely go down. Basically, I just want a query like this: select * into tbl_tmp from tbl_mail where mailid is duplicated 8-) Any suggestions? Tim Perdue PHPBuilder.com / GotoCity.com / Geocrawler.com
Tim Perdue ha scritto: > Somehow I have records in my database with duplicate primary keys. Because > of this, I'm not able to update a lot of records, because Postgres then > complains that I'm trying to insert a duplicate primary key. > > Can anyone suggest a way to select the duplicate ids out of the table so I > can change them? > > I can't really do a SELECT DISTINCT on a 3GB database table or my machine > would likely go down. > > Basically, I just want a query like this: > > select * into tbl_tmp from tbl_mail where mailid is duplicated > > 8-) > > Any suggestions? > > Tim Perdue > PHPBuilder.com / GotoCity.com / Geocrawler.com The SQL expression to retrieve duplicate rows is: select * from tbl_mail where mailid in ( select mailid from tbl_mail group by mailid having count(mailid) > 1 ); But currently PostgreSQL have problems with having (see TODO): * subqueries containing HAVING return incorrect results Therefore you have to query the tbl_mail in two times. 1) select mailid from tbl_mail group by mailid having count(mailid) > 1 2) select * from tbl_mail where mailid = (replace with values returned at point 1) José