sql >> Database >  >> RDS >> PostgreSQL

Waarom beschouwt PostgreSQL serialiseerbare transactie dit als een conflict?

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.



  1. SQL SELECT om cyclische verwijzingen te vinden in de vader-ID-georganiseerde boom?

  2. Wijs resultaat van dynamische sql toe aan variabele

  3. Kan geen verbinding maken met de localhost-database vanaf de node.js-server

  4. Hoe date_part() werkt in PostgreSQL