如果我成功在事务中执行了一些SQL,那么提交失败会发生吗?可能的原因是什么?它可能会失败与执行的查询有关,还是仅仅是由于某些数据库方面的问题?
问题出现了,因为我需要判断在测试中提交事务是否合理,或者它是否足够安全"在每个测试用例之后回滚。
答案 0 :(得分:0)
如果我在一个事务中成功执行了一些SQL,那么提交失败会发生吗?
是
可能的原因是什么?
DEFERRABLE
约束SET CONSTRAINTS DEFERRED
或单语句自动提交事务。 (除非您使用DEFERRABLE
约束,否则不会发生)SERIALIZABLE
事务,在提交时检测到序列化失败。 (除非您使用SERIALIZABLE
次交易,否则不会发生)synchronous_commit = on
,默认情况下不可能发生)commit
之后但在确认成功之前导致会话断开的网络错误。在这种情况下,您无法确定是否已提交。它是否会失败与执行的查询相关,或仅仅是由于某些数据库方面的问题?
要么。例如,序列化失败肯定与查询运行有关。
如果您使用的READ COMMITTED
隔离没有延迟约束,那么提交只会因底层系统错误而失败。
问题出现了,因为我需要判断在测试中提交事务是否有意义,或者在每个测试用例之后是否“足够安全”才能进行回滚。
任何合理的测试套件都必须涵盖多个并发事务的交互,以不同的顺序提交等等。
如果您测试的是单个独立事务,那么您就不会测试真实系统。
所以问题是IMO没有实际意义,因为无论如何都必须提供一套不错的测试。