我有一个很大的红移数据库。 记录没有唯一的密钥。
我想将下面的sql转换为postgresql。
DELETE FROM (
SELECT *,ROW_NUMBER() OVER (partition BY column1, column2, column3) AS rnum
FROM tablename ) t1
WHERE t1.rnum > 1;
执行上面的sql,出现以下错误:
亚马逊无效的操作:语法错误在或附近"(&#34 ;;
请:'(。
答案 0 :(得分:1)
在Postgres中,您可以使用delete from tablename
where ctid not in (select min(t2.ctid)
from tablename t2
group by column1, column2, column3
);
执行此操作。这是一个物理标识每一行的系统“列”。
这个想法是:
ctid
我不确定Redshift是否支持{{1}}。但话说回来,尽管有标签,你的问题仍明确是关于Postgres。