在PostgreSQL中混合隔离级别[英] Mixing isolation levels in PostgreSQL

本文是小编为大家收集整理的关于在PostgreSQL中混合隔离级别的处理方法,想解了在PostgreSQL中混合隔离级别的问题怎么解决?在PostgreSQL中混合隔离级别问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

如果任何其他会话使用例如 SERIALIZABLE 事务,这是否重要?autocommit 还是 READ COMMITED 隔离级别?

换句话说,当从多个进程/线程(或其他需要注意的事项)访问数据库时,混合隔离级别(和自动提交)是否有任何危险?

请注意,我知道"普通"问题,例如 SERIALIZABLE 事务要求重试等.我要求的是混合不同隔离级别时可能发生的任何不明显的问题.

编辑:

来自 http://www.postgresql.org/docs/9.4/static/transaction-iso.html:

<块引用>

一致使用可序列化事务可以简化开发.保证任何一组并发可序列化事务都将具有与一次运行一个相同的效果,这意味着如果您能证明所写的单个事务在以下情况下会做正确的事情独立运行,您可以确信它会在任何可序列化事务的组合中做正确的事情,即使没有任何关于其他事务可能做什么的信息.

这可能表明混合隔离级别不是一个好主意.另一方面,它只是说一致使用 SERIALIZABLE 级别是好的,而不是混合隔离级别是不好的.

推荐答案

SERIALIZABLE

当前事务的所有语句只能看到在此事务中执行第一个查询或数据修改语句之前提交的行.如果在并发可序列化事务中的读写模式会造成这些事务的任何串行(一次一个)执行都不会发生的情况,则其中一个将被滚动返回一个 serialization_failure 错误.

这意味着,SERIALIZABLE 事务仅在针对另一个 SERIALIZABLE 事务运行时的行为不同.如果它们针对非 SERIALIZABLE 事务运行,它们应该像 REPEATABLE READ 事务那样运行.这表明,混合这些事务隔离级别是完全安全的.

本文地址:https://www.itbaoku.cn/post/1763900.html