Вопросы к Поиску с Алисой
PostgreSQL автоматически выявляет взаимоблокировки и разрешает их, прерывая одну из сцепившихся транзакций и тем самым позволяя другой (другим) продолжить работу. postgrespro.ru
Процесс происходит так: когда процесс пытается захватить блокировку и не может, он встаёт в очередь и засыпает, но устанавливает таймер на значение, указанное в параметре deadlocktimeout (по умолчанию — 1 секунда). habr.com Если ресурс освобождается раньше, то проверка не проводится. habr.com Если по истечении deadlocktimeout ожидание продолжается, то ожидающий процесс разбужается и инициирует проверку. habr.com
Если взаимоблокировка выявлена, то одна из транзакций (в большинстве случаев — та, которая инициировала проверку) принудительно обрывается. habr.com При этом освобождаются захваченные ей блокировки и остальные транзакции могут продолжать работу. habr.com
Чтобы предотвратить взаимоблокировки, рекомендуется, чтобы все приложения, обращающиеся к базе данных, запрашивали блокировки нескольких объектов единообразно. postgrespro.ru Если заранее обеспечить такой порядок нельзя, взаимоблокировки можно обработать по факту, повторяя прерванные транзакции. postgrespro.ru