Postgresql

序列化異常是否只有 SUM/COUNT 才有可能?

  • August 9, 2022

我已閱讀深入了解 MySQL 和 PostgreSQL 中的隔離級別和閱讀現象,尤其是“Postgres 中的序列化異常”部分。我想我已經理解了那裡描述的問題,但是我很難判斷它何時會在我的應用程序中發生。

是否只有使用 SUM/COUNT 等聚合函式才能在 Postgres 中獲得序列化異常?如果不是,我還需要注意什麼?

有一個歸因於吉姆格雷的例子。

數據庫中有兩行。一個具有“白色”值,另一個具有“黑色”值。事務 T1 將所有白色更新為黑色,T2 將所有黑色更新為白色。

update table
set value = 'black'
where value = 'white'

每個事務只讀取一行並寫入同一行。每個事務的工作集是完全不相交的。在悲觀並發控制下,不需要任何鎖衝突。在樂觀的情況下,沒有寫集衝突。

為了可序列化,我們必須以所有值結束為白色或全黑。但是,如果以較低的隔離度同時執行,我們可以以行交換值結束。

引用自:https://dba.stackexchange.com/questions/315343