在 PostgreSQL 中,我有一个如下查询,它将从 1m 行表中删除 250k 行:
DELETE FROM table WHERE key = 'needle';
该查询需要一个多小时才能执行,在此期间,受影响的行被锁定以进行写入。这不好,因为这意味着许多更新查询必须等待大删除查询完成(然后它们将失败,因为行从它们下面消失了,但这没关系)。我需要一种方法将这个大查询分割成多个部分,以便它们对更新查询造成尽可能小的干扰。例如,如果删除查询可以被分成块,每个块有 1000 行,那么其他更新查询最多必须等待涉及 1000 行的删除查询。
DELETE FROM table WHERE key = 'needle' LIMIT 10000;
该查询可以很好地工作,但可惜它在 postgres 中不存在。