在我正在工作的项目中,有一个带有"on update"触发器的表,它监视布尔列是否已更改(例如:false - > true =执行某些操作).但是这个动作只能连续一次完成.
将有多个客户端访问数据库,因此我可以假设最终,多个客户端将尝试并行更新同一行列.
"update"触发器本身是否处理并发本身,或者我需要在事务中执行它并手动锁定表?
触发器不处理并发性,无论您是否使用显式事务,PostgreSQL都应该做正确的事情.
PostgreSQL使用乐观锁定,这意味着实际更新行的第一个人获得该行的锁定.如果第二个人试图更新该行,他们的更新语句将等待查看第一个提交更改或回滚.
如果第一个人提交,第二个人会收到错误,而不是他们的更改通过并删除可能对他们感兴趣的更改.
如果第一个人回滚,第二个人的更新解除阻塞,并正常通过,因为现在它不会覆盖任何东西.
第二个人也可以使用该NOWAIT
选项,如果他们的更新与未解决的更改冲突,则会立即发生错误而不是阻止.