2015-01-08 64 views
0

我目前正在研究rails API。我需要能夠從表中鎖定單個,因此在更新之前它不能是讀取。我必須這樣做,因此程序不會檢索當前用於進行一些計算的信息,從而產生不正確的結果。一行可以鎖定,因此無法讀取[使用Rails/Postgres]?

據我所知,ActiveRecord提供了使用Postgres或MySQL實現的方法。甚至有一種方法可以鎖定整個供讀取,但我一直無法找到任何有關阻止單行可讀性的內容。

有人建議我給我的模型添加一個標誌,這樣一旦它被訪問,它立即更新記錄的列到in_use = true。當下一個檢索特定模型實例的查詢運行時,它必須檢查該標記是否爲假。我唯一的擔心是,在提交記錄之前有一小段時間可能導致讀取正在使用的行。還有其他建議嗎?

+0

看看鐵軌中的悲觀鎖定。 http://api.rubyonrails.org/classes/ActiveRecord/Locking/Pessimistic.html是否做你想做的事? – Doon

+0

Rails 4支持標準的SQL事務隔離級別。 –

回答

1

PostgreSQL沒有提供鎖定所有讀取行的方法。

您可以通過使用SELECT ... FOR SHARESELECT ... FOR UPDATE而不是純SELECT的查詢鎖定一行。

如果您控制讀取的網站,您可以像Doon建議使用SELECT ... FOR SHARE爲希望在行被鎖定時阻止的讀取器,並使用SELECT ... FOR UPDATE來鎖定該行。

相關問題