PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dlaczego serializowalna transakcja PostgreSQL uważa to za konflikt?

Możesz rozwiązać ten problem za pomocą następującego indeksu:

CREATE INDEX accounts_user_idx ON accounts(user_id);

Ponieważ w twojej przykładowej tabeli jest tak mało danych, będziesz musiał powiedzieć PostgreSQL, aby użył skanowania indeksu:

SET enable_seqscan=off;

Teraz twój przykład zadziała!

Jeśli wydaje ci się to czarną magią, spójrz na plany wykonania zapytań Twojego SELECT i UPDATE oświadczenia.

Bez indeksu obaj użyją sekwencyjnego skanowania tabeli, w ten sposób odczytując wszystkie wiersze w tabeli . Tak więc obie transakcje zakończą się SIReadLock na całym stole.

Powoduje to niepowodzenie serializacji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Node.js:Definiowanie schematów Postgres w Sequelize

  2. SQL ORDER BY z CASE z UNION ALL

  3. Jak mogę ustawić ścieżkę do aplikacji heroku postgresql?

  4. Unikalny indeks na partycjach postgresql

  5. Co sprawdzić, jeśli wykorzystanie pamięci PostgreSQL jest wysokie?