繁体   English   中英

归因于隔离级别可序列化的SQL事务失败的一般处理

[英]Generalized handling of SQL transaction failures due to isolation level serializable

PostgreSQL文档13.2.3。 可序列化的隔离级别状态:

使用这种技术的环境必须具有通用的方式来处理序列化失败(该错误总是以SQLSTATE值“ 40001”返回),这一点很重要,因为很难准确地预测哪些事务可能会导致读/写。依赖项,需要回滚以防止序列化异常。

是否像往常一样立即重试事务直到成功,是否一样简单? 伪代码:

while (true) {
    try {
        BEGIN TRANSACTION
        ...
        COMMIT TRANSACTION
    }
    catch (SQLSTATE == '40001') {
        continue; // retry
    }
    break; // succeed
}

是否可以保证在某个时候成功? 是否有可能在一次失败之后就不可能成功的情况? 一个人还能/应该做什么? 是否取决于场景? 有时有时也必须重复先前的查询事务吗? 在那种情况下,怎么可能有一个广义的解决方案?

是否有任何开放源代码示例说明这种通用处理机制? 还是描述不同方法的任何好的资源(书籍,文章等)?

您的代码示例准确显示了应如何进行。

序列化失败应该很少发生; 如果不这样做,则数据库或应用程序设计中的某些内容是不正确的。

我猜有可能构建一个交易永远不会成功的场景,但这在实践中没有问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM