U kunt dit probleem oplossen met de volgende index:
CREATE INDEX accounts_user_idx ON accounts(user_id);
Aangezien er zo weinig gegevens in uw voorbeeldtabel staan, moet u PostgreSQL vertellen om een indexscan te gebruiken:
SET enable_seqscan=off;
Nu zal je voorbeeld werken!
Als dat zwarte magie lijkt, kijk dan eens naar de uitvoeringsplannen voor zoekopdrachten van uw SELECT
en UPDATE
verklaringen.
Zonder de index zullen beide een sequentiële scan op de tafel gebruiken, waardoor alle rijen in de tabel worden gelezen . Dus beide transacties eindigen met een SIReadLock
op de hele tafel.
Dit activeert de serialisatiefout.