Postgresql
序列化異常是否只有 SUM/COUNT 才有可能?
我已閱讀深入了解 MySQL 和 PostgreSQL 中的隔離級別和閱讀現象,尤其是“Postgres 中的序列化異常”部分。我想我已經理解了那裡描述的問題,但是我很難判斷它何時會在我的應用程序中發生。
是否只有使用 SUM/COUNT 等聚合函式才能在 Postgres 中獲得序列化異常?如果不是,我還需要注意什麼?
有一個歸因於吉姆格雷的例子。
數據庫中有兩行。一個具有“白色”值,另一個具有“黑色”值。事務 T1 將所有白色更新為黑色,T2 將所有黑色更新為白色。
update table set value = 'black' where value = 'white'
每個事務只讀取一行並寫入同一行。每個事務的工作集是完全不相交的。在悲觀並發控制下,不需要任何鎖衝突。在樂觀的情況下,沒有寫集衝突。
為了可序列化,我們必須以所有值結束為白色或全黑。但是,如果以較低的隔離度同時執行,我們可以以行交換值結束。