[英]postgresql: delete all locks
問題:有一個包含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)
如果不鎖定要刪除的行,則無法從表中刪除數據。
只要並發訪問不嘗試修改這些行或插入id = '1'
新行,這就不成問題,因為在PostgreSQL中,寫程序從不阻塞讀者,反之亦然。
如果並發事務不斷修改您要刪除的行,那會有點有趣(為什么要刪除所需的數據?)。 您必須等待排他鎖,否則很可能會遇到死鎖。 在這種情況下,最好在開始之前使用LOCK
語句鎖定整個表。 從表中刪除這么小的表只需要很短的時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.