Sobes.tech
Назад к вопросам
Middle+
1

Что происходит при обновлении строки в PostgreSQL с MVCC?

Компании, где спрашивали
Magnit Tech

Ответ от нейросети

sobes.tech AI

В PostgreSQL с MVCC (многоверсионным контролем параллелизма) при обновлении строки фактически не происходит изменение существующей записи. Вместо этого создаётся новая версия строки с обновлёнными данными, а старая версия помечается как устаревшая для новых транзакций.

Основные шаги:

  1. Создаётся новая версия строки с новым xmin (идентификатором транзакции, которая сделала обновление).
  2. Старая версия остаётся в таблице, но с пометкой, что она устарела (ее xmax устанавливается в текущую транзакцию).
  3. Другие транзакции, которые были открыты до обновления, видят старую версию, а новые — новую.
  4. Очистка старых версий происходит позже с помощью VACUUM.

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