2016-11-01 4 views
2

Ich habe eine große Rotverschiebung Datenbank. Die Datensätze haben keinen eindeutigen Schlüssel.SQL - Redshift entfernen doppelte Zeilen ohne Primärschlüssel

Ich möchte die folgenden SQL zu Postgresql konvertieren.

DELETE FROM (
SELECT *,ROW_NUMBER() OVER (partition BY column1, column2, column3) AS rnum 
FROM tablename) t1 
WHERE t1.rnum > 1; 

führen die oben sql, die folgenden Fehler auftreten:

Amazon Ungültige Operation: Syntaxfehler bei oder in der Nähe "(";

Bitte: '(

Antwort

1
.

In Postgres können Sie dazu ctid verwenden Dies ist eine System- "Spalte", die jede Zeile physikalisch identifiziert.

Die Idee ist:

delete from tablename 
    where ctid not in (select min(t2.ctid) 
         from tablename t2 
         group by column1, column2, column3 
        ); 

Ich bin nicht sicher, ob Redshift ctid unterstützt. Aber trotzdem, trotz der Tags, ist Ihre Frage explizit über Postgres.

+0

danke antwort :)! aber führen sql, folgende Fehler angezeigt: [Amazon] (500310) Ungültiger Vorgang: Spalte t2.ctid existiert nicht – hyeyoung

+0

redshift basiert auf Postgre SQL 8.0.2 – hyeyoung

+0

@hyeyoung. . . Aber es gibt wesentliche Unterschiede: http://docs.aws.amazon.com/redshift/latest/dg/c_redshift-and-postgres-sql.html. –