Django 没有自己的隔离级别,用的是数据库默认。但默认是什么?换成 REPEATABLE READ 之后,代码要改什么?这篇在 PostgreSQL 上用两个线程构造「事务里别人改了同一行」,看每个级别下读与写的结果。
read committed
没有设置任何选项时的行为。
在 DATABASES['default']['OPTIONS'] 里设置 isolation_level(psycopg 3 的 IsolationLevel)。上一节的对照见演示。更严格的级别把「读到旧值」变成了「写的时候失败」——好处是不会悄悄基于旧值提交,代价是必须写重试逻辑。