PostgreSQL имеет deadlock detector: периодически строит граф ожидания блокировок. При обнаружении цикла одна из транзакций откатывается с ошибкой "deadlock detected"; остальные продолжают. Параметр deadlock_timeout (по умолчанию 1 с) задаёт, как часто проверять. Чтобы избежать дедлоков, блокируйте ресурсы в одном и том же порядке во всех транзакциях.