Musisz dodać indeks do id
kolumna, aby zapewnić blokadę na poziomie wiersza. SELECT ... FOR UPDATE
blokuje wszystkie odczytane wiersze w celu wykonania zapytania, a nie tylko wiersze, które są faktycznie wybrane. Bez indeksu musi wykonać pełne skanowanie tabeli, więc każdy wiersz jest w rezultacie blokowany.
Za pomocą indeksu po prostu umieszcza blokadę w tym wpisie indeksu, nie musi czytać żadnych innych wierszy, więc żadne inne wiersze nie zostaną zablokowane.