ALTER TABLE захватывает Exclusive Lock и вешает всю СУБД.V1__init.sql, U1__undo.sql.Flyway определяет тип и порядок выполнения миграций строго по соглашению об именовании файлов:
V<Версия>__<Описание>.sql -- Версионированная миграция (Versioned)
U<Версия>__<Описание>.sql -- Undo-миграция отката (Rollback)
R__<Описание>.sql -- Повторяемая миграция (Repeatable)
V — накат, U — откат, R — повторное выполнение при изменении хэша.1, 2.1, 20261001_1200).__).Перед запуском миграций Flyway проверяет служебную мета-таблицу в целевой базе данных:
CREATE TABLE flyway_schema_history (
installed_rank INT NOT NULL PRIMARY KEY, -- Хронологический номер наката
version VARCHAR(50) NULL, -- Номер версии (напр. '1', '2')
description VARCHAR(200) NOT NULL, -- Название операции
type VARCHAR(20) NOT NULL, -- Тип: SQL, UNDO, BASELINE
script VARCHAR(1000) NOT NULL, -- Имя файла миграции
checksum INT NULL, -- Контрольная сумма файла (CRC32)
installed_by VARCHAR(100) NOT NULL, -- Пользователь СУБД
installed_on TIMESTAMP DEFAULT NOW(), -- Временная метка применения
execution_time INT NOT NULL, -- Длительность в миллисекундах
success BOOLEAN NOT NULL -- Результат: TRUE или FALSE
);
flyway_schema_history.checksum). Если файл изменили → немедленная остановка с ошибкой!U2__drop_barcode_from_goods.sql.V2 (удаление добавленной таблицы/колонки).flyway_schema_history.V3__revert_barcode_change.sql.Как обновить базу без остановки сервиса (Zero-Downtime Deployment)?
В базу добавляется новая структура параллельно со старой. Старые колонки не удаляются, новые поля объявляются как NULLable.
Новое приложение пишет в обе колонки одновременно. Фоновый процесс копирует старые данные. Затем чтение переключается на новую колонку.
Когда старая версия приложения полностью выведена из эксплуатации, отдельной миграцией удаляется старая колонка и триггеры.
-- 1. ЭТАП EXPAND (Миграция V4): создаем новую таблицу
CREATE TABLE client_passports (
client_id INT PRIMARY KEY REFERENCES clients(client_id),
series_number VARCHAR(20) NOT NULL,
issued_by TEXT NOT NULL
);
-- 2. ЭТАП TRANSITION: бэкфилл данных из старой колонки
INSERT INTO client_passports (client_id, series_number, issued_by)
SELECT client_id, passport_data, 'MVD' FROM clients;
-- 3. ЭТАП CONTRACT (Миграция V6, через месяц после обновления клиентов):
ALTER TABLE clients DROP COLUMN passport_data;
После выполнения DDL-миграции необходимо удостовериться, что прикладные компоненты сохранили работоспособность:
| Тип проверки | Что проверяем? | Критерий успеха |
|---|---|---|
| Совместимость INSERT | Старые экранные формы вставки записей | Новые поля имеют DEFAULT, вставка без них не вызывает ошибок. |
| Стабильность VIEW/PROC | Хранимые процедуры и отчетные представления | Объекты не инвалидированы, возвращают валидные типы данных. |
| Производительность SELECT | Тяжелые поисковые запросы | Новые индексы работают (Index Scan), время отклика в пределах SLA. |
Миграция V2: добавление колонки Штрихкод_EAN13 (UNIQUE) в Товары. Регрессионный тест старых форм поиска.
Миграция V3: таблица Источники_бронирования и внешний ключ в Бронирования. Проверка стабильности регистрации.
Миграция V4: выделение Паспортные_данные из Клиентов с переносом данных и безопасным Undo-скриптом.
Миграция V5: составной индекс idx_results_date_student. Тестирование ускорения формирования сводной ведомости.
Migrate → Test → Undo → Migrate.CONCURRENTLY).zanyatie.html в браузере.flyway_schema_history.Скрипт прямой миграции:
Синтаксическая чистота DDL, корректные типы, обратная совместимость (DEFAULT для NOT NULL), уникальные индексы и внешние ключи.
Протокол отката и теста:
Зеркальный Undo-скрипт без утечки мусорных объектов и оформленный регрессионный тест совместимости клиентских запросов.
Аудит и самопроверка:
Корректный расчет метаданных flyway_schema_history и глубокие аргументированные ответы на блок самопроверки.
Robert'); DROP TABLE Students; --. Когда школа вставила имя ученика через конкатенацию SQL-строки, база данных стерла всех студентов года. Занятие 28 напоминает: любая модификация схемы данных и обработка пользовательских структур должна быть строго контролируемой, версионированной и защищенной от деструктивных изменений!