PostgreSQL 事务隔离:先说明异常,再选择级别

背景 先说需要避免哪一种业务异常,再讨论隔离级别,远比直接选择最高级别有效。库存扣减和账户转账关注的约束并不相同。 核心判断 用并发事务复现丢失更新、写偏差等风险。 能通过原子 SQL、唯一约束或行锁表达的规则,尽量交给数据库。 Serializable 冲突可能导致事务失败,调用方准备有限重试。 最小示例 下面保留核心逻辑;业务类型、调用入口和环境配置按项目补齐。 BEGIN ISOLATION LEVEL SERIALIZABLE; UPDATE accounts SET balance = balance - 10 WHERE id = 1; COMMIT; 边界与误区 示例只有一次扣款,不是完整转账。重试必须从事务开始重新执行,事务外已经发生的副作用也要考虑幂等。 验证方式 使用两个连接安排读写交错,验证业务不变量;对 serialization failure 注入重试,并检查重试预算与外部副作用是否重复。 小结 从业务不变量出发选择隔离级别,并为 serialization failure 准备有限重试。

2026年9月19日 · 1 分钟 · BvBeJ