Nepotřebujete žádné explicitní LOCK
dostat se do slepé uličky. Zde je velmi jednoduché demo od nuly pouze s INSERTy:
create table a(i int primary key);
create table b(i int primary key);
Relace #1 dělá:
begin;
insert into a values(1);
Potom relace č. 2 provede:
begin;
insert into b values(1);
insert into a values(1);
-- here it goes into waiting for session #1 to finish its transaction
Potom relace č. 1 provede:
insert into b values(1);
A pak dojde k uváznutí:
Totéž se může stát s jednoduchými UPDATEs nebo kombinací UPDATEs a INSERTs. Tyto operace mají implicitní zámky, a pokud k nim dojde v různých relacích v různém pořadí, mohou uváznout.