Sobes.tech
Назад к вопросам
Senior
6

Какие блокировки возникают в PostgreSQL при создании уникального индекса на колонку? Как PostgreSQL создаёт и изменяет записи (MVCC)?

Компании, где спрашивали
Сбербанк

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

sobes.tech AI

Блокировки при создании уникального индекса в PostgreSQL:

При создании уникального индекса PostgreSQL использует блокировки, чтобы гарантировать целостность данных:

  • На время создания индекса таблица блокируется в режиме ACCESS EXCLUSIVE LOCK — это самая строгая блокировка, которая блокирует все операции чтения и записи.
  • Это необходимо, чтобы избежать изменений данных во время построения индекса и гарантировать уникальность.

MVCC (Многоверсионность) в PostgreSQL:

PostgreSQL реализует MVCC для обеспечения изоляции транзакций без блокировок чтения:

  • Каждая строка содержит служебные поля с идентификаторами транзакций, которые её создали и удалили.
  • При чтении транзакции видят только те версии строк, которые были актуальны на момент начала транзакции.
  • При обновлении создаётся новая версия строки с новым xmin (идентификатором транзакции), старая версия помечается как удалённая (с xmax).
  • Удалённые версии остаются в таблице до тех пор, пока не будет выполнена очистка (vacuum).

Таким образом, записи не блокируются при чтении, а блокировки применяются только при модификации, что повышает параллелизм и производительность.