Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: deadlock, postgres

Что такое deadlock в базе данных и как его избежать?

Проверяет умение работать с транзакциями и конкурентными блокировками.

Короткий ответ

Deadlock возникает, когда две транзакции ждут друг друга из-за блокировок строк или таблиц. Избежать можно упорядочиванием доступа к ресурсам, короткими транзакциями и ретраями.

Длинный ответ

Определение: deadlock — ситуация, когда транзакция А ждёт ресурс транзакции B, а B ждёт ресурс А.

Пример:

  1. T1 блокирует строку A, хочет обновить B.

  2. T2 блокирует строку B, хочет обновить A.

    → обе транзакции навсегда ждут.

Как ловить:

  • Postgres сам прерывает одну транзакцию (deadlock detected).

  • Можно логировать pg_locks.

Как избежать:

  1. Брать ресурсы в одинаковом порядке.

  2. Делать короткие транзакции.

  3. Использовать SELECT ... FOR UPDATE SKIP LOCKED.

Вывод: deadlock неизбежны, но проектирование транзакций должно их минимизировать.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • Postgres

    Postgres

Ключевые слова

#deadlock

#postgres

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.