Что такое версионирование записей в 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)
- Может приводить к фантомному чтению на некоторых уровнях изоляции