【发布时间】:2016-09-16 14:07:09
【问题描述】:
PostgreSQL documentation 13.2.3. Serializable Isolation Level 声明:
使用此技术的环境具有处理序列化失败的通用方法(总是返回 SQLSTATE 值“40001”)非常重要,因为很难准确预测哪些事务可能会导致读/写依赖,需要回滚以防止序列化异常。
这是否像总是立即重试事务直到成功一样简单?伪代码:
while (true) {
try {
BEGIN TRANSACTION
...
COMMIT TRANSACTION
}
catch (SQLSTATE == '40001') {
continue; // retry
}
break; // succeed
}
是否保证在某个时候成功?有没有在失败一次之后就不可能成功的情况?还有什么可以/应该做的?这取决于场景吗?也许有时也必须重复更早的查询事务?在那种情况下,如何可能有一个广义的解决方案?
有没有这种通用处理机制的开源示例?或者任何描述不同方法的好资源(书籍、文章……)?
【问题讨论】:
标签: sql postgresql transactions isolation-level