2016-11-01 4 views
2

У меня есть большая база данных с красным смещением. записи не имеют уникального ключа.SQL - Redshift удаляет повторяющиеся строки без первичного ключа

Я хотел бы преобразовать приведенный ниже sql в postgresql.

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

выполнить выше SQL, появляются следующие ошибки:

Amazon Недопустимая операция: ошибка синтаксиса или вблизи "(";

пожалуйста: '(

ответ

1
.

В Postgres вы можете сделать это, используя ctid. Это системная «колонка», которая физически идентифицирует каждую строку.

Идея такова:

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

Я не уверен, что если Redshift поддерживает ctid. Но опять же, несмотря на теги, ваш вопрос явно о Postgres.

+0

спасибо ответ :)! но выполнить sql, появляются следующие ошибки: [Amazon] (500310) Неверная операция: столбец t2.ctid не существует – hyeyoung

+0

redshift основан на Postgre SQL 8.0.2 – hyeyoung

+0

@hyeyoung. , , Но есть существенные различия: http://docs.aws.amazon.com/redshift/latest/dg/c_redshift-and-postgres-sql.html. –