Primary Key und Duplikate

Hallo,

ich habe mir aus mehreren Tabellen eine große Tabelle zusammengebaut, da es schnell gehen sollte hatte ich auf dieser natürlich keine Constraints.
Jetzt versuche ich gerade einen Primary Key auf der Tabelle zu erstellen und sehe, dass es Duplikate gibt. Gibt es irgendeine schnelle Methode die Duplikate beim erstellen des Primary Keys zu löschen
oder sollte ich lieber gleich nochmal alles zusammenbauen? Die Tabelle hat ca. 600.000.000 Zeilen.

Edit: Meine Idee wäre gerade eine zusätzliche Spalte zu machen, über alle Zeilen einen Index und dann mit Index Duplikate löschen. Ist aber sicher auch langsam oder?

vielen Dank

Extra Spalte mit Wert würde aber einen kompletten Neuaufbau der Tabelle nach sich ziehen.

Vielleicht hilft ja auch schon dies:

test=# select * from captn ;
 id
----
  1
  2
  3
  3
  4
  5
(6 rows)

test=*# delete from captn where (ctid,id) in ( select min(ctid),id from captn group by id having count(id) > 1);
DELETE 1
test=*# select * from captn ;
 id
----
  1
  2
  3
  4
  5
(5 rows)

Mach vorher ein Backup :wink:

Vielen dank für deinen Tipp, das ist so nicht ganz so leicht für mich anwendbar, weil ich nen key über mehrere Zeilen habe.

Habe jetzt doch nochmal alles neu zusammengebaut. Das dauert nur etwa eine Stunde. Also im Rahmen. Allerdings habe ich jetzt wieder woanders duplikate ob wohl es meiner meinung nach nicht sein kann. Entweder ich habe nen Denkfehler oder Postgres fügt die Daten fehlerhaft zusammen :frowning:

PostgreSQL fügt vermutlich und sehr wahrscheinlich die Daten so zusammen, wie Du es spezifiziert hast. Alles andere wäre ein Bug. Nicht daß man das völlig ausschließen kann, hab erst am Freitag einen gefunden und von Tom Lane bestätigt bekommen, aber in dem Fall denke ich mal PEBKAC.

Andreas