Du behöver ingen explicit LOCK
att hamna i ett dödläge. Här är en mycket enkel demo från början med bara INSLAG:
create table a(i int primary key);
create table b(i int primary key);
Session #1 gör:
begin;
insert into a values(1);
Då gör session #2:
begin;
insert into b values(1);
insert into a values(1);
-- here it goes into waiting for session #1 to finish its transaction
Då gör session #1:
insert into b values(1);
Och sedan uppstår dödläget:
Samma sak kan hända med enkla UPPDATERINGAR eller en kombination av UPPDATERINGAR och INSERT. Dessa operationer kräver implicita låsningar, och om de sker i olika sessioner i olika ordningsföljder kan de låsa sig.