まず、最小 SELECT ... FOR UPDATE
を実行する必要があります したがって、他のSELECT ... FOR [SHARE|UPDATE]
に対して行をロックします。 アクセス。これはトランザクション内で実行し、最後の行を更新してcommit
するまでそのトランザクションを保持する必要があります 。
SELECT ... FOR UPDATE
する行 ない 通常のSELECT
に対してロックされています; FOR UPDATE
を使用していない他のトランザクションでも引き続き読み取り可能です。 またはFOR SHARE
。
さらに良いことに、全体をUPDATE ... FROM
と言い換えてみてください。 または、単一のクエリですべての作業を行うその他のセットベースの操作。通常、SELECT ... FOR UPDATE
よりもはるかに優れたパフォーマンスを発揮します。 その後にUPDATE
のストリームが続きます s。