Files
LMS/deploy/preflight/README.md

4.2 KiB
Raw Blame History

Preflight перед миграциями групп и курсов

Перед любыми миграциями обязателен backup: ./deploy/backup.sh backup (см. ../BACKUP.md). Preflight не заменяет backup.

Скрипты только читают данные:

  • groups-courses.sql — до миграций: проблемы, которые могут помешать;
  • groups-courses-post.sql — после миграций и bootstrap курса C: проверка результата;
  • progress-v10-v13.sql — проверка истории Flyway и колонок/индекса при переходе старой feature-миграции V10 на V13.

До миграций

psql -h localhost -U lms -d lms -f deploy/preflight/groups-courses.sql

Проверяет:

  • группы, имя которых не разбирается шаблоном;
  • одинаковые кортежи (stream, degree, number, course, enrollment_year);
  • группы без полного набора полей;
  • одинаковые имена групп;
  • студентов без текущей группы;
  • дубли номеров лабораторных при переносе в один курс;
  • дубли slug глав;
  • объём материалов и активов.

После миграций и bootstrap

psql -h localhost -U lms -d lms -f deploy/preflight/groups-courses-post.sql

Проверяет:

  • лабы без курса (должно быть 0 перед SET NOT NULL);
  • главы без курса (должно быть 0, если все текущие материалы курсовые);
  • наличие ровно одного курса C;
  • комментарии без автора;
  • статусы аккаунтов;
  • группы без полного разбора.

Переход V10 → V13

Нужен для любой БД, которая когда-либо применяла старую feature-миграцию V10__profile_authors.sql: dev/feature-БД и staging, ненадолго запускавший master-коммит bfdae41 (out-of-order + V10). На production/master записи V10 нет — раздел можно пропустить.

Порядок:

  1. Backup: ./deploy/backup.sh backup.

  2. Проверить состояние:

    psql -h localhost -U lms -d lms -f deploy/preflight/progress-v10-v13.sql
    

    Колонки должны быть uuid/nullable, индекс lab_grades_lab_idx — существовать и быть валидным; columns_ok и index_ok должны быть true.

  3. Если V10 есть в истории с success=true, удалить только эту запись истории (flyway repair или точечный DELETE из примера в конце скрипта). При success=false сначала проверить откат объектов; V13 идемпотентна и создаст недостающее.

  4. Deploy: обычный запуск применит V13.

  5. Postflight: psql -h localhost -U lms -d lms -f deploy/preflight/groups-courses-post.sql.

После V13 переход forward-only: откат на сборку без V13 не пройдёт валидацию Flyway. Не оставляйте out-of-order включённым.

Что делать с результатами

  1. Группы с нестандартными именами — разобрать вручную и заполнить поля до перехода на NOT NULL.
  2. Одинаковые кортежи — исправить номер или год набора.
  3. Дубли номеров лаб — перенумеровать или разнести по разным курсам до включения UNIQUE (number, course_id) / NOT NULL.
  4. Дубли slug — переименовать главы до частичных индексов.
  5. После bootstrap курса C проверить, что labs_without_course = 0 и chapters_without_course = 0.