Postgresql 并发更新,提交时使其他事务失败
我有两个程序PCrit和PLong使用Postgres在同一张表上读写 PCrit非常关键,永远不会失败/阻塞 PLong需要在一个事务中读取、计算和更新很多内容,这可能需要几分钟的时间,但只要回滚所有更改,它就可能失败 行具有状态,如果状态为“已修复”,则PLong无法使用此状态更新行。 PCrit可以在第二个事务中仅处理这些行之前,将单个查询中的所有行快速更新为“已修复” 在大多数情况下,PCrit和PLong不会更新相同的行。但如果扑通一声需要太长时间才能跑完,这种情况可能会发生 如果PCrit运行并更新行,我希望PLong在碰到PCrit更新的任何行时无法提交 我考虑使用可重复读取事务级别 例如:Postgresql 并发更新,提交时使其他事务失败,postgresql,transactions,sql-update,Postgresql,Transactions,Sql Update,我有两个程序PCrit和PLong使用Postgres在同一张表上读写 PCrit非常关键,永远不会失败/阻塞 PLong需要在一个事务中读取、计算和更新很多内容,这可能需要几分钟的时间,但只要回滚所有更改,它就可能失败 行具有状态,如果状态为“已修复”,则PLong无法使用此状态更新行。 PCrit可以在第二个事务中仅处理这些行之前,将单个查询中的所有行快速更新为“已修复” 在大多数情况下,PCrit和PLong不会更新相同的行。但如果扑通一声需要太长时间才能跑完,这种情况可能会发生 如果PC
无法序列化访问)
我应该改变我的设计来达到同样的目标吗?没有办法自动做到这一点 您可以对PCrit使用非常低的
lock\u timeout
,如果出现锁超时错误,请使用pg\u cancel\u backend
杀死PLong