postgresql:删除所有锁

时间:2017-02-25 23:15:13

标签: sql postgresql

问题:有一个超过9000行的表。必须清理它,但没有任何锁(活动使用的表)。我尝试使用pg_advisory_unlock_all,但没有结果。

select pg_advisory_unlock_all();
start transaction();
delete from table where id='1';
DELETE 1

start transaction();
delete from table where id='1';
(waiting for finish first transaction)

1 个答案:

答案 0 :(得分:1)

如果不锁定要删除的行,则无法从表中删除数据。

只要并发访问不会尝试修改这些行或使用id = '1'插入新行,这不应该是一个问题,因为编写者永远不会阻塞读者,反之亦然。 / p>

如果并发事务不断修改要删除的行,那有点好笑(为什么要删除所需的数据?)。你必须等待独占锁,你可能会遇到死锁。在这种情况下,最好在开始之前使用LOCK语句锁定整个表。从表中删除那么小的时间应该只需要很短的时间。