83 lines
4.2 KiB
Markdown
83 lines
4.2 KiB
Markdown
# Preflight перед миграциями групп и курсов
|
||
|
||
**Перед любыми миграциями обязателен backup:** `./deploy/backup.sh backup`
|
||
(см. [`../BACKUP.md`](../BACKUP.md)). Preflight не заменяет backup.
|
||
|
||
Скрипты только читают данные:
|
||
|
||
- `groups-courses.sql` — до миграций: проблемы, которые могут помешать;
|
||
- `groups-courses-post.sql` — после миграций и bootstrap курса C: проверка результата;
|
||
- `progress-v10-v13.sql` — проверка истории Flyway и колонок/индекса при переходе
|
||
старой feature-миграции V10 на V13.
|
||
|
||
## До миграций
|
||
|
||
```bash
|
||
psql -h localhost -U lms -d lms -f deploy/preflight/groups-courses.sql
|
||
```
|
||
|
||
Проверяет:
|
||
|
||
- группы, имя которых не разбирается шаблоном;
|
||
- одинаковые кортежи `(stream, degree, number, course, enrollment_year)`;
|
||
- группы без полного набора полей;
|
||
- одинаковые имена групп;
|
||
- студентов без текущей группы;
|
||
- дубли номеров лабораторных при переносе в один курс;
|
||
- дубли slug глав;
|
||
- объём материалов и активов.
|
||
|
||
## После миграций и bootstrap
|
||
|
||
```bash
|
||
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. Проверить состояние:
|
||
|
||
```bash
|
||
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`.
|