jay*_*jay 9 postgresql locking ruby-on-rails
假设我有一个Article我想要执行一些更改.
如果我使用with_lock,是否会阻止其他进程读取Articles表中的那一行?
例如
@article = Article.find(1)
Article.with_lock
#do something
end
# In another process
@article = Article.find(1) # will this lookup be blocked by the first process?
Run Code Online (Sandbox Code Playgroud)
Cra*_*ger 17
根据文档,它SELECT ... FOR UPDATE默认执行.
一个SELECT ... FOR UPDATE在某行并不能读取该行阻止其他会话.它仅阻止其他会话获取行上的FOR UPDATE(写入)或FOR SHARE(读取)锁定.对于SELECT没有任何FOR UPDATEor FOR SHARE子句的会话,该行通常仍然可读.
所以在这种情况下,你需要find行,然后lock('FOR SHARE')如果你想确定没有其他人FOR UPDATE对它进行锁定就可以执行.
有关更多详细信息,请参阅有关显式锁定的PostgreSQL文档.
| 归档时间: |
|
| 查看次数: |
3685 次 |
| 最近记录: |