Je hebt geen expliciete LOCK
nodig in een impasse te raken. Hier is een heel eenvoudige demo van de grond af met alleen INSERT's:
create table a(i int primary key);
create table b(i int primary key);
Sessie #1 doet:
begin;
insert into a values(1);
Dan doet sessie #2:
begin;
insert into b values(1);
insert into a values(1);
-- here it goes into waiting for session #1 to finish its transaction
Dan doet sessie #1 dat wel:
insert into b values(1);
En dan komt de impasse:
Hetzelfde kan gebeuren met eenvoudige UPDATE's of een combinatie van UPDATE's en INSERT's. Voor deze bewerkingen zijn impliciete vergrendelingen nodig en als ze in verschillende sessies in verschillende volgorde plaatsvinden, kunnen ze vastlopen.