Трябва да добавите индекс към id
колона, за да сте сигурни, че получавате заключване на ниво ред. SELECT ... FOR UPDATE
заключва всички редове, които се четат за изпълнение на заявката, а не само редовете, които действително са избрани. Без индекс той трябва да извърши пълно сканиране на таблицата, така че в резултат всеки ред е заключен.
С индекс той просто поставя заключване в този запис в индекса, не е необходимо да чете други редове, така че няма да бъдат заключени други редове.