Du kan løse dette problem med følgende indeks:
CREATE INDEX accounts_user_idx ON accounts(user_id);
Da der er så få data i din eksempeltabel, bliver du nødt til at fortælle PostgreSQL at bruge en indeksscanning:
SET enable_seqscan=off;
Nu vil dit eksempel virke!
Hvis det virker som sort magi, så tag et kig på forespørgselsudførelsesplanerne for din SELECT
og UPDATE
udsagn.
Uden indekset vil begge bruge en sekventiel scanning på tabellen, derved læse alle rækker i tabellen . Så begge transaktioner ender med en SIReadLock
på hele bordet.
Dette udløser serialiseringsfejlen.