有没有办法在Postgresql中选择未锁定的行?我有一个多线程应用程序将执行:
Select... order by id desc limit 1 for update
Run Code Online (Sandbox Code Playgroud)
在桌子上.
如果多个线程运行此查询,它们都会尝试拉回同一行.
一个获取行锁,另一个获取然后在第一个更新行后失败.我真正喜欢的是第二个线程获取匹配该WHERE子句的第一行并且尚未锁定.
为了澄清,我希望每个线程在执行select之后立即更新第一个可用行.
因此,如果有行ID: 1,2,3,4,第一个线程将进入,选择行ID=4并立即更新它.
如果在该事务期间第二个线程出现,我希望它能获得行ID=3并立即更新该行.
对于Share,也不会完成此操作,nowait因为该WHERE子句将与锁定的行匹配(ID=4 in my example).基本上我喜欢的是这个WHERE条款中的"并没有锁定" .
Users
-----------------------------------------
ID | Name | flags
-----------------------------------------
1 | bob | 0
2 | fred | 1
3 | tom | 0
4 | ed | 0
Run Code Online (Sandbox Code Playgroud)
如果查询是" Select ID from users where flags = 0 order by ID desc limit …