postgresql: 使用SQL删除重复数据

在数据库测试上线后,会遇到数据库中的重复数据问题,即只有主键不同,其他核心要素相同,对于冗余、统计来说都是个问题,因此需要清理重复数据,相同的内容只保留一个即可。
本来我还以为这种需求没有办法用sql解决,之前遇到类似的问题,都是通过手工的方式解决的。搜索后发现这个可以用SQL直接解决:即使用ctid这个变量名。

在数据中心的实际使用中,比如用户的下载记录中的重复数据,可以使用下述SQL来解决:

delete from dataorder 
where ctid not in 
(
select min(ctid) from dataorder d
where status in (0,5) and ts_approved>'2007-12-31' and ts_approved<'2009-1-1'
group by userid,uuid,status,onlineappid,offlineappid,extract(month from ts_approved)
)
and  d.status in (0,5) and d.ts_approved>'2007-12-31' and d.ts_approved<'2009-1-1'

参考:
PostgreSQL删除重复数据


已发布

分类

来自

标签:

评论

《“postgresql: 使用SQL删除重复数据”》 有 1 条评论

  1. […] 在PostgreSQL中,可以借助ctid变量删除重复数据:postgresql: 使用SQL删除重复数据,但在GreenPlum中,由于数据是分散到不同的segment上,因此仅使用ctid无法删除重复数据了,需要借助pg_segment_id来解决。 […]

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注