Først minimum du burde lave en SELECT ... FOR UPDATE
så du låser rækkerne mod andre SELECT ... FOR [SHARE|UPDATE]
adgang. Du skal gøre dette inde i en transaktion og holde denne transaktion tilbage, indtil du opdaterer den sidste række og commit
.
De rækker du SELECT ... FOR UPDATE
ikke låst mod normal SELECT
; de er stadig læsbare for andre transaktioner, der ikke bruger FOR UPDATE
eller FOR SHARE
.
Endnu bedre, prøv at omformulere det hele som en UPDATE ... FROM
eller anden sæt-baseret operation, hvor du udfører alt arbejdet i en enkelt forespørgsel. Det vil generelt præstere enormt bedre end en SELECT ... FOR UPDATE
efterfulgt af en strøm af UPDATE
s.