我想更新表中的一些行,并且我想锁定它们以便其他进程不会同时更新它们。但我希望其他进程能够阅读它们。
我试图完成它的方式是这样的:
MyTable.where(mycolumn: "some value").lock(true).update_all(mycolumn: "other value")
我认为这lock(true)
是锁定选定的行(这是文档所说的),但我不知道它们是否可同时用于其他选择。所以我认为我应该强制使用“共享模式”。
我正在尝试这个:
MyTable.where(mycolumn: "some value").lock("LOCK IN SHARE MODE").update_all(mycolumn: "other value")
但它引发了这个错误:
STATEMENT: SELECT "my_table".* FROM "my_table" WHERE "my_table"."mycolumn" = $1 LIMIT 1 LOCK IN SHARE MODE
ERROR: syntax error at or near "LOCK" at character 74
它虽然适用于 SQLite。