Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Postgres: lost, update

Что такое lost update и при каких условиях он возникает?

Вопрос проверяет понимание проблем конкурентного доступа и изоляции транзакций.

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

Lost update — это ситуация, когда одна транзакция перезаписывает изменения другой, не учитывая их. Это происходит, когда несколько транзакций читают одно значение и затем записывают новое. Если нет механизма блокировок или версионирования, одно обновление теряется. Такая проблема возникает при низких уровнях изоляции.

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

Lost update — это одна из аномалий конкурентного доступа.

Как возникает lost update

Сценарий:

  1. Транзакция A читает значение = 10

  2. Транзакция B читает значение = 10

  3. A записывает 15

  4. B записывает 12

Результат:

  • обновление A потеряно

Когда это возможно

Чаще всего:

  • при уровне изоляции Read Committed

  • при отсутствии блокировок

  • при обновлениях по прочитанному значению

Как предотвратить

Используют:

  1. SELECT FOR UPDATE

  2. оптимистическую блокировку

  3. более высокий уровень изоляции

Пример:

SELECT * FROM account WHERE id=1 FOR UPDATE;

Где это критично

Особенно важно:

  • финансы

  • счётчики

  • складские остатки

Вывод

Lost update возникает, когда параллельные транзакции обновляют одни и те же данные без координации, и одно из изменений теряется.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Postgres

    Postgres

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

#lost

#update

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