postgresql 并发写入同一行

问题描述 投票:0回答:1

我有多个进程在同一个 postgresql 数据库上运行,当多个进程尝试写入同一行(其更新的不同列)时,下面的流程是否正确? 隔离级别 - 已提交读

我可以接受 process-2 等待 process-1 完成,只是想确保我不会丢失任何数据或抛出任何错误。

postgresql concurrency race-condition
1个回答
0
投票

是的,您描述的行为是正确的。数据修改通过行锁进行序列化,因此进程 2 必须等待进程 1 提交事务。在

READ COMMITTED
事务隔离级别上,进程 2 将获取该行的最新提交版本,检查它是否仍然符合条件,锁定它并执行更新。

简单来说,进程2不会撤销进程1的数据修改。

虽然这种行为方便且高效,但它可能会导致“有趣的异常”,因为它使进程 2 运行的数据版本比正常情况下更高版本。较高的事务隔离级别通过向进程 2 报告“序列化错误”来避免该问题,然后进程 2 必须重复该事务。

© www.soinside.com 2019 - 2024. All rights reserved.