Выбор ответа Senior Миграции спрашивают часто обновлено
Создание индекса на большой таблице
Вопрос
Почему на большой таблице PostgreSQL индекс создают через CREATE INDEX CONCURRENTLY?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Обычный CREATE INDEX блокирует запись в таблицу на время построения. Обычное построение берёт блокировку, которая запрещает INSERT, UPDATE и DELETE, и на большой таблице это минуты простоя.
Варианты ответа
- Обычный
CREATE INDEXблокирует запись в таблицу на время построенияправильный ответ - Обычный индекс не используется планировщиком, пока не выполнен ANALYZE
- CONCURRENTLY строит индекс в несколько раз быстрее за счёт параллельных воркеров
- Без CONCURRENTLY индекс не переживёт перезапуск базы и его придётся пересоздать
Разбор
Обычное построение берёт блокировку, которая запрещает INSERT, UPDATE и DELETE, и на большой таблице это минуты простоя. CONCURRENTLY позволяет писать в таблицу, зато строится дольше, не работает внутри транзакции и при сбое оставляет невалидный индекс, который нужно удалить. В Django для этого AddIndexConcurrently из django.contrib.postgres.operations в миграции с atomic = False.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Миграции»
- Ограничения autogenerate в Alembic
- Порядок применения миграций по зависимостям
- Разбить перенос данных на пачки по id
- Схема expand и contract
- RunPython в миграциях Django
- Почему apps.get_model в миграции данных
- Миграция встала в очередь за долгой транзакцией
- makemigrations и migrate