Проверяет умение работать с транзакциями и конкурентными блокировками.
Deadlock возникает, когда две транзакции ждут друг друга из-за блокировок строк или таблиц. Избежать можно упорядочиванием доступа к ресурсам, короткими транзакциями и ретраями.
Определение: deadlock — ситуация, когда транзакция А ждёт ресурс транзакции B, а B ждёт ресурс А.
Пример:
T1 блокирует строку A, хочет обновить B.
T2 блокирует строку B, хочет обновить A.
→ обе транзакции навсегда ждут.
Как ловить:
Postgres сам прерывает одну транзакцию (deadlock detected).
Можно логировать pg_locks.
Как избежать:
Брать ресурсы в одинаковом порядке.
Делать короткие транзакции.
Использовать SELECT ... FOR UPDATE SKIP LOCKED.
Вывод: deadlock неизбежны, но проектирование транзакций должно их минимизировать.