PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Защо сериализируемата транзакция на PostgreSQL смята това за конфликт?

Можете да коригирате този проблем със следния индекс:

CREATE INDEX accounts_user_idx ON accounts(user_id);

Тъй като във вашата примерна таблица има толкова малко данни, ще трябва да кажете на PostgreSQL да използва сканиране на индекс:

SET enable_seqscan=off;

Сега вашият пример ще работи!

Ако това изглежда като черна магия, погледнете плановете за изпълнение на заявката на вашия SELECT и UPDATE изявления.

Без индекса и двете ще използват последователно сканиране на таблицата, по този начин ще прочетат всички редове в таблицата . Така че и двете транзакции ще завършат с SIReadLock върху цялата маса.

Това задейства неуспешната сериализация.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проблеми с Crosstab/Pivot на PostgreSQL

  2. Избиране на средна стойност от записи, групирани по 5-минутни периоди

  3. Проверете дали NULL съществува в Postgres масива

  4. Управление на замръзване в PostgreSQL

  5. инсталация на postgres, инициализацията на клъстера на базата данни е неуспешна (Postgresql версия 9.4.4)