【发布时间】:2014-01-01 20:01:56
【问题描述】:
你好,新年快乐 :)
我正在使用 Postgresql,我需要一种方法来使工作进程能够锁定特定行,而该进程在该行上运行。它本质上是一个动作表,应该执行一次且只执行一次。每个进程都应该抓取不同的行进行操作。
在这个“操作”期间,工作进程将计算一些值并在一个事务中多次插入数据库(它会在计算和插入数据库之间改变)。
我不知道每个操作需要多长时间(它会有所不同),我需要一种方法来解锁该行,如果该进程死亡/被杀死或系统崩溃(以便其他进程可以抓住该行并完成操作)。
据我所知,Postgresql 的行锁只在一个事务中持续。我正在考虑添加一些标志,这将指示行是否被锁定到表中,但我无法弄清楚如何判断该行是否仍在操作,或者它是否挂起,因为工作进程死了(在后一种情况下,它应该被其他工作进程占用)? (我在该表中有一个完成标志来表示该行已完成/已完成处理)
【问题讨论】:
-
听起来你想要一些准备好的事务和/或咨询锁的组合。在 postgresql 文档中搜索这两个术语,看看是否有帮助。至于每个进程抓取一行,看看我几天前发布的这个通用方法,看看是否有什么东西跳出来:stackoverflow.com/questions/20846631/…
标签: sql postgresql concurrency transactions locking