1. 概述
几乎在所有情况下,PostgreSQL 数据库都必须支持许多想要同时添加或更改数据的客户端。这使得有必要保护并发运行的请求,最好不要阻塞它们。可能会出现以下情况:两个客户端想要同时更改同一行,或者一个客户端想要撤销(回滚)他的更改,而另一个客户端可能仍试图读取最新版本。
想象一下提供最后一篇文章的在线商店。两个客户在他们的用户界面上显示文章。一段时间后,但同时,两个客户都决定将商品放入他们的购物车,甚至购买。两人都看过这篇文章,但只能允许一个人购买。数据库必须强制执行请求的顺序,允许对其中一个请求进行写访问,阻止另一个写入,并通知被阻止的客户端数据已被不同的进程更改并应重新读取。
2. MVCC
PostgreSQL 实现了一种复杂的技术来处理避免锁定的并发访问:多版本并发控制(MVCC
)。MVCC 技术不是锁定行,而是在发生数据更改时创建该行的新版本。“使用 MVCC …而不是锁定的主要优点是,在 MVCC
中,为查询&#