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

postgres deadlock без изрично заключване

Нямате нужда от изрично LOCK да влезе в задънена улица. Ето една много проста демонстрация от нулата само с INSERT:

create table a(i int primary key);
create table b(i int primary key);

Сесия №1 прави:

begin;
insert into a values(1);

Тогава сесия №2 прави:

begin;
insert into b values(1);
insert into a values(1);
-- here it goes into waiting for session #1 to finish its transaction

Тогава сесия №1 прави:

insert into b values(1);

И тогава настъпва задънена улица:

Същото може да се случи с обикновени АКТУАЛИЗАЦИИ или комбинация от АКТУАЛИЗАЦИИ и ВМЪКВАНИЯ. Тези операции изискват имплицитни заключвания и ако се случват в различни сесии в различен ред, може да блокират.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ръководство за използване на pgBouncer за PostgreSQL

  2. Как да настроите отдалечена връзка с PostgreSQL

  3. dblink не използва файла .pgpass

  4. PostgreSQL - правилна промяна на ID на реда на таблицата

  5. Използване на pt-pg-summary Percona Toolkit за PostgreSQL