Comments 4
Материал огонь! Спасибо за цикл статей по миграциям!
Хорошая систематизация – особенно Expand-Migrate-Contract: без этого шаблона большинство "безопасных" миграций превращаются в лотерею. Кстати, к блоку про CONCURRENTLY стоит добавить один сценарий: если CREATE INDEX CONCURRENTLY прервётся на полпути (дроп соединения, OOM), PostgreSQL оставит индекс с indisvalid = false. Планировщик его игнорирует, а DML прилежно обновляет. Django об этом не предупреждает – нужно самому делать SELECT из pg_indexes по indisvalid и дропать руками перед повтором.
Отличный туториал! Вот бы еще и линтер по правилам из статьи 🌚
ADD COLUMN NOT NULL DEFAULT 'x'Славик добавил поле
is_archived =models.BooleanField(default=False)в таблицу с 80 000 000 строк на PostgreSQL 13. Миграция отработала за 14 минут
Начиная с Postgres 11 при добавлении not null колонки с default с константным значением меняется только метаинформация, никакого обновления таблицы нет. Можете проверить сами.
manage.py migrate в пятницу в 17:30 на проде с 3K RPS и таблицей 200М строк