テーブル内のいくつかの行を更新したいのですが、それらをロックして、他のプロセスがそれらを同時に更新しないようにしたいと考えています。しかし、他のプロセスにそれらを読み取ってもらいたいのです。
私がそれを達成しようとしている方法は次のようなものです:
MyTable.where(mycolumn: "some value").lock(true).update_all(mycolumn: "other value")
選択した行をロックしていると思いますがlock(true)
(ドキュメントに記載されています)、同時に他の選択に使用できるかどうかはわかりません。だから私は「SHARE MODE」を強制するべきだと思います。
私はこれを試しています:
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で動作します。