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