複数の行をロックする必要がありますが、返される結果として 1 つの行のみを取得します。where id = 2
さて、私が理解したように、2つの可能な方法があります:
1) 2 つの異なるクエリを実行します。
-- get user data and lock that row
SELECT some_column FROM users WHERE id = 2 FOR UPDATE INTO my_var;
-- just lock another rows
SELECT some_column FROM users WHERE id IN(4,7) FOR UPDATE;
2)CTEと「偽の」更新を使用して、次のような1つのクエリを使用します。
WITH t AS(
UPDATE users
SET some_column = some_column
WHERE id IN(2,4,7)
returning some_column
)
SELECT some_column FROM t WHERE id = 2
INTO my_var;
では、どちらの方法がより適切でしょうか? またはさらに良い方法があるかもしれませんか?