在PostgreSQL's isolation levels documentation中声明
保证真正的可串行化PostgreSQL使用谓词锁定, 这意味着它保持锁定,允许它确定何时 写入会对先前从a读取的结果产生影响 并发事务,先运行它。在PostgreSQL中,这些锁做 不会导致任何阻止因此无法发挥任何作用 陷入僵局。它们用于识别和标记其中的依赖关系 并发可序列化的事务,在某些组合中可以 导致序列化异常。
当我尝试在隔离级别SERIALIZABLE
中执行两个更新语句时,看起来第二个写入会阻塞,直到第一个事务提交或中止。你可以看到他在gif文件中的交互打击:
about语句如何解释这种行为?我希望第二个事务继续,直到提交,然后得到could not serialize
错误。
BTW,event
表的架构如下:
CREATE TABLE event (
id INT,
created_at timestamp
)
答案 0 :(得分:1)
该段落仅描述谓词锁,它是仅在可序列化隔离级别上使用的特殊锁类。
除了这些特殊锁之外,可序列化事务还将采用其他隔离级别使用的“普通”锁。