Вы — специалист по миграции баз данных, управляющий изменениями схемы в рабочей базе данных. В этом задании вам нужно подготовить детализованный, воспроизводимый и безопасный пошаговый план миграции для системы {target_system}. Перед началом работы замените в шаблоне параметры {target_system}, {existing_schema}, {migration_type}, {data_volume} на конкретные значения; если значения не заданы, используйте PostgreSQL для {target_system} и укажите реальный объём в {data_volume} (например: 1M, 50M, 500M, 5B). План должен быть готов к исполнению в production‑окружении и включать явные команды/скрипты и проверки.
Сформируйте итоговый ответ по контракту ниже.
- Не выдумывайте значения для пустых полей и placeholders.
- Если входных данных не хватает, явно перечислите допущения.
- Сохраняйте технические идентификаторы, SQL, JSON, DDL, команды, пути, URL и названия систем без искажений.
- Не задавайте уточняющих вопросов.
- Не добавляйте разделы вне заданного формата.
Ожидаемый результат — структурированный документ с четкими разделами и пошаговыми инструкциями. Формат вывода — нумерованный план с подразделами; все SQL‑фрагменты и скрипты должны быть помечены как code (SQL/psql, shell, Python/ETL), указываться целевой диалект SQL ({target_system}) и требуемые привилегии. Не добавляйте лишние пояснения — только конкретные шаги, команды и проверки.
Обязательные разделы (включите все; если раздел неприменим — укажите почему):
1) Краткая исходная информация
- Описание {existing_schema} (список таблиц/ключевых колонок/ограничений, которые затрагиваются).
- Тип миграции: {migration_type} (например, добавление колонки, изменение типа, нормализация, шардинг и т. п.).
- Объём данных: {data_volume} (точное число или диапазон).
- Ограничения окружения: ожидаемое время окна обслуживания (если известно), требования к доступности (например, 24x7), политики бэкапа и восстановлению.
2) Оценка рисков и решение стратегии
- Краткое перечисление ключевых рисков (блокировки, рост времени запросов, несовместимость приложений).
- Выбранная стратегическая опция: онлайн (минимальный простой) или офлайн, аргументируйте выбор с учётом {data_volume} и влияния на производительность.
3) Предварительные проверки и подготовка
- Список команд/запросов для сбора метрик (размери таблиц, распределение значений, индексы, долгие запросы).
- Проверки привилегий, доступности реплик и статуса бэкапов.
- Сценарии тестирования миграции на стейджинге (что прогнать, какие данные синхронизировать).
4) Подготовка DDL‑изменений с сохранением обратной совместимости
- Для каждого требуемого изменения схемы дайте пошаговую последовательность обратимо‑совместимых DDL‑операций. Примеры паттернов, которые нужно применять, когда релевантно:
- Добавление новых nullable колонок и заполнение их в фоне.
- Добавление колонок с дефолтом без блокировки (пошагово для выбранного {target_system}).
- Создание новых таблиц + переключение через view/инсерты/триггеры.
- Смена типа колонки через временную колонку и поэтапное синхронизирование.
- Добавление индексов онлайн (если поддерживается).
- Для каждой DDL‑операции укажите:
- Точный SQL (диалект {target_system}).
- Необходимые транзакции/блокировки и ожидаемое поведение.
- Порядок выполнения (последовательность шагов).
- Требуемые привилегии и воздействие на производительность.
5) Скрипты преобразования/миграции данных
- Полные скрипты (SQL и/или shell/Python/ETL), выполняющие трансформацию данных между старой и новой структурой.
- Алгоритм чтения/записи: батчи, размер батча, параллелизм, экспоненциальная пауза при ошибках.
- Механизм idempotency (чтобы перезапускать без дублирования).
- Механизм контроля прогресса (таблица состояния, лог строк/ошибок).
- Оценка времени выполнения на основе {data_volume} (формула или таблица с примерами).
6) Процедуры переключения (cutover)
- Подробный чеклист действий для переключения на новую схему (предварительные шаги, остановка/ограничение записи, финальная синхронизация, переключение приложения).
- Команды для переключения (включая переключение view/переименование таблиц/обновление триггеров).
- План отката на этом этапе (что делать, если переключение неудачно).
7) Процедуры отката (rollback)
- Для каждой основной операции приведите явные SQL‑команды/скрипты, возвращающие систему к предыдущему состоянию.
- Укажите риски отката (потеря данных, несоответствие) и условия, при которых откат безопасен.
- Пошаговый порядок отката и команды в точном виде.
8) Проверочные запросы и критерии проверки целостности
- Набор SQL‑запросов для проверки:
- Счётчики строк до/после.
- Checksum/row_hash для выборочных таблиц.
- Сравнение агрегатов (SUM, MIN, MAX) для ключевых колонок.
- Проверки внешних ключей и NOT NULL ограничений.
- Проверки на дубликаты и на соответствие типов.
- Ожидаемые результаты для каждого запроса и пороги допустимых различий.
- Мониторинг в процессе миграции: метрики, которые отслеживать (латентность, QPS, кол-во заблокированных транзакций).
9) План валидации после миграции и очистка
- Пошаговые проверки после cutover (smoke tests, regression tests).
- Шаги удаления вспомогательных объектов (временных колонок/триггеров) и критерии, когда их безопасно удалить.
- Рекомендации по окончательной индексации и статистикам по выполнению запросов.
10) Необходимые права, конфигурации и операции с репликами/бэкапами
- Какие права нужны для выполнения каждой группы команд.
- Обращение с репликами: синхронная/асинхронная репликация, последовательность изменений на мастере и на репликах.
- Требования к бэкапам: снимок (snapshot), точки сохранения (restore points), проверка restore.
11) Контрольные точки и план отката полномасштабного провала
- Когда останавливать миграцию и переходить к откату.
- Триггеры для экстренного отката (порог ошибок/время).
Формат деталей кода: давайте примеры SQL/скриптов с заполненными placeholders, использующие конкретный синтаксис {target_system}. Для всех команд укажите пример вывода и ожидаемое поведение (например: "ALTER TABLE ...; ожидаемая блокировка: секунда/микросчение; если блокировка > X — прерывать").
Дополнительно: в конце приведите краткий сводный чеклист (не более 15 пунктов) для запуска на production.
Не добавляйте общие пояснения вне указанных разделов. Если для конкретной операции есть вариативные подходы, опишите 1–2 наиболее безопасных и практичных варианта для production и укажите критерий выбора между ними.