在PostgreSQL中删除和返回数据

Max*_*xym 0 postgresql performance

我有以下问题:我的表是大的(数百万个数据行),这是我处理的临时数据.我需要根据某些标准选择一列的最大值和最小值,处理此信息并根据相同的标准删除数据.实际上,最简单的实现看起来像:

select max(col), min(col) from _TABLE_ where _CONDITION_;
...
delete from _TABLE_ where _CONDITION_;
Run Code Online (Sandbox Code Playgroud)

table很大,当我处理它时,在循环中查询,这需要一些时间.我想我可以使用delete中的"返回"来优化它,比如

delete from _TABLE_ where _CONDITION_ returning max(col), min(col);
Run Code Online (Sandbox Code Playgroud)

这绝对是我需要的,但是...它根本不起作用:)说我不能在返回子句中使用聚合函数...

有没有什么好方法可以改进两个查询(选择数据的最大/最小值并删除相同的数据)来代替一个查询?任何诡计?

感谢Maxym提供的任何信息

Gis*_*nas 7

你可以做:

with foo as(delete from table where _CONDITION_ returning col)
select max(col), min(col) from foo
Run Code Online (Sandbox Code Playgroud)