Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 博士后';s可序列化事务块并发写入_Postgresql_Transactions - Fatal编程技术网

Postgresql 博士后';s可序列化事务块并发写入

Postgresql 博士后';s可序列化事务块并发写入,postgresql,transactions,Postgresql,Transactions,在报告中指出: 为了保证真正的可序列化性,PostgreSQL使用谓词锁定, 这意味着它保持锁,允许它确定 写操作会对以前从数据库读取的结果产生影响 并发事务,首先运行它。在PostgreSQL中,这些锁do 不会导致任何阻塞,因此不会在导致阻塞中起任何作用 僵局。它们用于标识和标记各个组件之间的依赖关系 并发可序列化事务,在某些组合中可以 导致序列化异常 当我尝试在隔离级别SERIALIZABLE中执行两条update语句时,似乎第二条写操作会一直阻塞,直到第一个事务提交或中止。您可以看到gi

在报告中指出:

为了保证真正的可序列化性,PostgreSQL使用谓词锁定, 这意味着它保持锁,允许它确定 写操作会对以前从数据库读取的结果产生影响 并发事务,首先运行它。在PostgreSQL中,这些锁do 不会导致任何阻塞,因此不会在导致阻塞中起任何作用 僵局。它们用于标识和标记各个组件之间的依赖关系 并发可序列化事务,在某些组合中可以 导致序列化异常

当我尝试在隔离级别
SERIALIZABLE
中执行两条update语句时,似乎第二条写操作会一直阻塞,直到第一个事务提交或中止。您可以看到gif文件中的交互:

about语句如何解释这种行为?我希望第二个事务继续进行,直到提交,然后获取
无法序列化
错误

顺便说一句,
事件
表的模式如下:

CREATE TABLE event (
  id INT,
  created_at timestamp
)

本段仅描述谓词锁,谓词锁是仅在可序列化隔离级别上使用的一类特殊锁


除了这些特殊锁之外,可序列化事务还将使用其他隔离级别使用的“普通”锁。

感谢您的澄清!后续问题:这些锁定(在
SERIALIZABLE
REPEATABLE READ
中)是否会导致死锁,或者PostgreSQL将中止其中一个死锁的事务?您可以获得死锁,但PostgreSQL将通过在等待
deadlock\u timeout
秒后终止其中一个涉及的事务来解决它(默认值为1)。