Nie potrzebujesz żadnego wyraźnego LOCK
wejść w impas. Oto bardzo proste demo od podstaw z samymi WSTAWKAMI:
create table a(i int primary key);
create table b(i int primary key);
Sesja nr 1 wykonuje:
begin;
insert into a values(1);
Następnie sesja nr 2:
begin;
insert into b values(1);
insert into a values(1);
-- here it goes into waiting for session #1 to finish its transaction
Następnie sesja nr 1:
insert into b values(1);
A potem następuje impas:
To samo może się zdarzyć w przypadku prostych UPDATE lub kombinacji UPDATE i INSERT. Te operacje wymagają niejawnych blokad, a jeśli mają miejsce w różnych sesjach w różnej kolejności, mogą się zakleszczyć.