MVCC 与事务
通用事务理论:数据库事务;MySQL 对照:MySQL 事务与锁。
MVCC 并发控制
PostgreSQL 使用纯 MVCC(多版本并发控制),读操作不加锁,读不阻塞写,写不阻塞读。
每行数据有隐藏字段:
xmin:创建该版本的事务 IDxmax:删除/更新该版本的事务 ID(0 表示未删除)
读操作只看对当前事务可见的版本,不同于 MySQL 的共享锁方式。
Vacuum:定期清理不可见的旧版本行,释放空间。PostgreSQL 有 autovacuum 自动运行。运维见 EXPLAIN 与运维。
事务
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- 或 ROLLBACK;保存点(Savepoint)
BEGIN;
INSERT INTO orders ...;
SAVEPOINT sp1;
INSERT INTO order_items ...;
-- 如果失败,只回滚到 sp1,不影响 orders 的插入
ROLLBACK TO SAVEPOINT sp1;
COMMIT;