sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvorfor mener PostgreSQL serialiserbar transaktion, at dette er en konflikt?

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.



  1. Finde duplikerede poster i en tabel

  2. Hvordan man bygger relationelle tabeller på en tosidet markedsplads

  3. Tjek, om Tomcat og MySQL allerede er installeret på maskinen

  4. gør øget kolonne b-træets indeks på kolonnen ubalanceret?