在PostgreSQL中,可以借助ctid变量删除重复数据:postgresql: 使用SQL删除重复数据,但在GreenPlum中,由于数据是分散到不同的segment上,因此仅使用ctid无法删除重复数据了,需要借助pg_segment_id来解决。
参考了这篇文章:http://www.cnblogs.com/kuang17/p/5861700.html,最终解决方法就是:
delete from taxi_2010_dup where (gp_segment_id,ctid) not in (select gp_segment_id,min(ctid) from taxi_2010_dup group by tid,gpstime,gp_segment_id);
在实际测试过程中,发现上述sql有时删除重复数据不彻底,还是这种办法好:
DELETE FROM dupes T1 USING dupes T2 WHERE T1.ctid < T2.ctid -- delete the older versions AND T1.key = T2.key; -- add more columns if needed
发表回复