本章描述 PostgreSQL 数据库系统在两个或者更多会话试图同时访问同样的数据的时候表现出来的样子。 在那种并发访问的情况下的目标是为所有会话提供高效的访问,同时还要维护严格的数据完整性。 每个数据库应用的开发人员都应该熟悉本章讨论的话题。
与其他使用锁来进行并行控制的数据库系统不同, PostgreSQL 利用多版本模型来维护数据的一致性。 (多版本并发控制,Multiversion Concurrency Control, MVCC)。 这就意味着当检索数据库时,每个事务都看到一个数据的一段时间前的快照 ( 一个数据库版本), 而不管正在处理的数据当前的状态。这样,如果对每个数据库会话进行事务隔离, 就可以避免一个事务看到因为其它并行的事务更新同一行数据而导致的不连贯的数据。
使用MVCC多版本并发控制比锁定模型的主要优点是在MVCC里, 对检索(读)数据的锁要求与写数据的锁要求不冲突, 所以读不会阻塞写,而写也从不阻塞读。
在 PostgreSQL 里也有表和行级别的锁定设施, 用于给那些无法轻松接受 MVCC 行为的应用。 不过,恰当地使用 MVCC 总会提供比锁更好地性能。