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