PostgreSQL可序列化能否与较低的隔离级别安全地混合使用?

时间:2018-07-23 19:44:44

标签: postgresql transactions isolation-level

我试图弄清楚在混合Serialisable和较低级别的隔离但运气不佳时的行为。具体来说,我们有一个reorder-queue-items事务,该事务当前正在使用表锁,以确保在此期间不会向其添加任何新项目。即使其他事务以“可重复读取”操作,将其序列化并读取队列的头部(以确保对结果的依赖性)是否也可以提供相同级别的保证?

使用PostgreSQL 9.5。

PS。我知道这里有another question with a similar title,但是它已经使用了4年了,它的要求已经不那么具体了,鉴于引用的材料,唯一的答案基本上是无来源的,并且不能真正回答问题。

1 个答案:

答案 0 :(得分:0)

为保证可序列化性,所有参与的事务都应使用SERIALIZABLE隔离级别。

但是我不确定可序列化隔离是否可以解决您的问题。它不会阻止任何人从队列中读取或写入队列,它会使某些事务失败,而失败的事务很可能是试图重新排序队列的事务。

我认为在这种情况下,锁是一种解决方法。使用可序列化的事务将对性能造成同样严重的影响,不同之处在于,您不必继续等待事务,而要等待重试,直到重新排序成功为止。