awesome-everything EN
↑ Обратно к восхождению

Базы данных

Миграции схемы: тест с выбором ответа

Суть Тест с выбором на синтез по всему юниту: lock-queue freeze, перезапись при ADD COLUMN, NOT VALID/VALIDATE, expand-contract, WAL-флуд бэкфилла и порядок деплоя.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов поперёк всего юнита. Каждый отражает решение, которое ты принимаешь, выкатывая изменение схемы на живую базу под трафиком — не определение для заучивания, а режим отказа, от которого надо защититься.

Цель

Убедись, что связываешь поведение блокировок, безопасные DDL-перезаписи, фазы expand-contract, радиус поражения бэкфилла и порядок деплоя — тот синтез, к которому вели семь уроков.

Викторина

На PG 16 деплой выполняет statement ниже, и он завершается за 8 мс, но таблица users возвращает 503 в течение 70 секунд. На users уже выполнялся 60-секундный аналитический SELECT, когда сработал ALTER. Что на самом деле заморозило таблицу? ```sql ALTER TABLE users ADD COLUMN status TEXT DEFAULT 'active'; ```

Викторина

Тот же мгновенный ALTER из вопроса 1 продолжает таймаутиться за долгими запросами. Какое одно изменение превращает «миграция замораживает базу» в «миграция логирует ошибку и ретраит»?

Викторина

Нужно добавить FOREIGN KEY к таблице orders на 100M строк, не блокируя записи. Какой подход production-безопасен?

Викторина

Rolling-деплой переименовывает users.username в users.handle. Чтобы и старая, и новая версии приложения работали в каждый момент, какой порядок шагов верен?

Викторина

Бэкфилл выезжает одним statement на таблице в 100M строк. На связке primary + 2 реплики что ломается первым и какой устойчивый фикс? ```sql UPDATE users SET handle = username WHERE handle IS NULL; ```

Викторина

Три реплики Kubernetes стартуют одновременно, и каждая выполняет migrate up при запуске. Одна успешна; две падают с ошибками дублирования объекта. Чего не хватало и какой более чистый production-паттерн?

Итог

Сквозная линия юнита — один защитный чек-лист для каждого изменения схемы. Блокировки: большинству DDL нужен ACCESS EXCLUSIVE, и FIFO-очередь превращает один медленный запрос в заморозку таблицы — SET lock_timeout, чтобы неудачная попытка прервалась и ретраила. Перезаписи: константный дефолт мгновенен с PG 11, volatile-дефолты всё ещё перезаписывают. Constraints и индексы: NOT VALID + VALIDATE и CREATE INDEX CONCURRENTLY берут SHARE UPDATE EXCLUSIVE и оставляют DML работающим. Ломающие изменения: expand-contract держит старый и новый код совместимыми в каждый момент, никогда не одношаговый rename. Бэкфиллы: батчь, чтобы ограничить WAL-флуд и replica lag. Раннеры: сериализуй advisory lock’ом и гейти pre-deploy job перед выкаткой. Каждый ответ сводится к одному инварианту — схема должна оставаться совместимой с обеими версиями кода, в каждый момент, не замораживая таблицу.

Продолжить восхождение ↑Миграции схемы: свободное припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.