2017-02-25 71 views
0

問題:有超過9000行的表。它必須清潔,但沒有任何鎖(表在積極使用)。我試圖使用pg_advisory_unlock_all,但沒有結果。postgresql:刪除所有鎖

​​
+0

pg_advisory_unlock將發佈**以前獲得的**獨家諮詢鎖 – McNets

+0

是否有可能關閉它們,或者我必須設置正確的鎖? –

+0

https://www.postgresql.org/docs/9.4/static/explicit-locking.html – McNets

回答

1

如果不鎖定要刪除的行,無法從表中刪除數據。

只要併發訪問不嘗試修改這些行或使用id = '1'插入新行,這是不應該成爲問題的,因爲編寫者在PostgreSQL中從不阻止讀取器,反之亦然。

如果併發事務不斷修改要刪除的行,這有點好笑(爲什麼要刪除所需的數據?)。您必須等待排他鎖,並且您可能會遇到死鎖。在這種情況下,最好在開始之前將整個表與LOCK語句鎖定。從小表中刪除應該只需要很短的時間。