sql >> Databáze >  >> RDS >> PostgreSQL

Proč to serializovatelná transakce PostgreSQL považuje za konflikt?

Tento problém můžete vyřešit pomocí následujícího indexu:

CREATE INDEX accounts_user_idx ON accounts(user_id);

Protože ve vaší vzorové tabulce je tak málo dat, budete muset PostgreSQL sdělit, aby použil indexové skenování:

SET enable_seqscan=off;

Nyní bude váš příklad fungovat!

Pokud to vypadá jako černá magie, podívejte se na plány provádění dotazů vašeho SELECT a UPDATE prohlášení.

Bez indexu oba použijí sekvenční prohledávání tabulky, čímž se přečtou všechny řádky v tabulce . Obě transakce tedy skončí s SIReadLock na celý stůl.

To způsobí selhání serializace.



  1. Změnit plán provádění dotazu v postgresql ručně?

  2. Postgres – Převeďte seznam sousedství na vnořený objekt JSON

  3. Vybrat data mezi dvěma daty vylučují některé dny

  4. při použití odkazu na databázi Oracle došlo k chybě ORA-12154 TNS Nelze vyřešit zadaný identifikátor připojení