2016-07-05 54 views

回答

2

是的,它可能導致死鎖。

這很容易演示。建立一個測試表:

CREATE TABLE t AS SELECT i FROM generate_series(1,1000000) s(i); 

...然後並行運行這兩個查詢:

SELECT i FROM t ORDER BY i FOR UPDATE; 
SELECT i FROM t ORDER BY i DESC FOR UPDATE; 

可以防止死鎖的發生,確保所有進程獲得他們鎖在同一順序。或者,如果要鎖定表中的每條記錄,可以使用table lock

LOCK t IN ROW SHARE MODE;