Postgresql

PostgreSQL 樂觀讀取(相當於 SQL Server 的 Read Committed Snapshot)

  • January 31, 2016

PostgreSQL 是否提供了內置的樂觀並發控制機制,例如 SQL Server 的 Read Committed Snapshot Isolation?讀者可以在不阻塞的情況下讀取所有行,但是如果在事務期間修改了行,則寫入將阻塞並失敗。

編輯:在 RCSI 下寫入實際上並沒有“阻塞和失敗”,而只是阻塞。

這就是 Postgres 是如何從頭開始設計的(與 SQL Server 相比,這是很晚才添加的)

有關詳細資訊,請參閱手冊:http ://www.postgresql.org/docs/current/static/mvcc-intro.html

您實際上不能配置 Postgres,以便讀者會阻止作者(自動或隱式)

在 Postgres 中阻止讀取訪問的唯一方法是(手動)以獨占方式鎖定整個表(lock table foo access exclusive)。

這將阻止對錶的任何訪問(不僅是單個行)。


並且與 SQL Server 不同,Postgres 也沒有鎖升級,當超過某個行鎖門檻值時,整個表被鎖定以進行寫入。

因此,僅僅因為一個事務更新了表中所有行的 95%(並因此為其他寫入者鎖定了它們),這並不意味著其他事務不能更新剩餘的 5%——使用 SQL Server,你很可能以鎖定整個表的鎖升級結束。

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