簡體   English   中英

PostgreSQL:刪除所有鎖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM