D'abord, au minimum vous devriez faire un SELECT ... FOR UPDATE
donc vous verrouillez les lignes contre d'autres SELECT ... FOR [SHARE|UPDATE]
accéder. Vous devez le faire à l'intérieur d'une transaction et maintenir cette transaction jusqu'à ce que vous mettiez à jour la dernière ligne et commit
.
Les lignes que vous SELECT ... FOR UPDATE
pas verrouillé contre le SELECT
normal; ils sont toujours lisibles pour les autres transactions qui n'utilisent pas FOR UPDATE
ou FOR SHARE
.
Mieux encore, essayez de reformuler le tout en tant que UPDATE ... FROM
ou toute autre opération basée sur un ensemble où vous effectuez tout le travail en une seule requête. Il fonctionnera généralement beaucoup mieux qu'un SELECT ... FOR UPDATE
suivi d'un flux de UPDATE
s.