我有多个进程在同一个 postgresql 数据库上运行,当多个进程尝试写入同一行(其更新的不同列)时,下面的流程是否正确? 隔离级别 - 已提交读
我可以接受 process-2 等待 process-1 完成,只是想确保我不会丢失任何数据或抛出任何错误。
是的,您描述的行为是正确的。数据修改通过行锁进行序列化,因此进程 2 必须等待进程 1 提交事务。在
READ COMMITTED
简单来说,进程2不会撤销进程1的数据修改。
虽然这种行为方便且高效,但它可能会导致“有趣的异常”,因为它使进程 2 运行的数据版本比正常情况下更高版本。较高的事务隔离级别通过向进程 2 报告“序列化错误”来避免该问题,然后进程 2 必须重复该事务。