Что такое версионирование записей в PostgreSQL

Python Middle Без компании
Что такое версионирование записей в PostgreSQL
Ответы
Версионирование записей в PostgreSQL (MVCC — Multi-Version Concurrency Control) — это механизм, позволяющий нескольким транзакциям работать с одними данными без блокировок. Каждая запись может иметь несколько версий, что обеспечивает изоляцию транзакций и высокую производительность. **Как работает:** - При изменении записи создается новая версия, а старая остается для других транзакций - Каждая версия содержит `xmin` (идентификатор создавшей транзакции) и `xmax` (идентификатор удалившей транзакции) - Видимость версий определяется на момент начала транзакции **Пример:** ``` -- Транзакция 1 (началась первой) BEGIN; SELECT * FROM users WHERE id = 1; -- Видит версию X -- Транзакция 2 изменяет запись BEGIN; UPDATE users SET name = 'New' WHERE id = 1; COMMIT; -- Транзакция 1 продолжает видеть старую версию SELECT * FROM users WHERE id = 1; -- Все еще версия X COMMIT; ``` **Плюсы:** - Высокий параллелизм (чтение не блокирует запись) - Отсутствие блокировок для чтения - Поддержка изоляции транзакций на разных уровнях **Минусы:** - Накапливается "мусор" от старых версий (требует VACUUM) - Может приводить к фантомному чтению на некоторых уровнях изоляции