了解多版本并发控制(MVCC)和快照
大多数数据库管理系统(DBMS)使用锁来强制实施并发控制,但 PostgreSQL 使用替代方法补充锁定。 PostgreSQL 使用称为多版本并发控制(MVCC)的系统,该系统允许存在同一行的多个版本以提高并发性。 使用此系统,每个查询都会看到具有事务一致性的数据的早期快照。 MVCC 确保正在读取数据的事务不会阻止正在写入数据的事务,反之亦然。
例如,连接 A 正在执行一项扫描整个表中所有行的查询。 同时,连接 B 正在执行更新某些行的查询。 MVCC 允许这两个查询同时运行,方法是创建受影响的行的另一个版本。 这样,连接 B 就可以执行更新,而不会影响连接 A。此过程由每个行版本具有可见 xmin 值,因为 事务和可见 的 xmax 值,直到 事务为止。 使用 MVCC,连接 A 将忽略连接 A 查询启动后发生的任何修改。
交易
在数据库管理系统中,事务是一个原子工作单元,因此事务要么完全提交,要么完全不提交。 事务也用于并发目的。 使用隔离级别时,可以定义一个事务在其他并发事务上可能具有的效果。
通过使用 BEGIN TRANSACTION 或 START TRANSACTION 来启动事务。 使用 COMMIT 完成事务,以保存事务中所做的所有更改或 ROLLBACK,以撤消事务所做的任何更改。 例如:
BEGIN TRANSACTION;
UPDATE production.workorder
SET stockedqty=7
WHERE workorderid=1;
COMMIT;