junior
Какова структура changeset?
Changeset — основной строительный блок миграции. Он содержит атрибуты идентификации, опциональные предусловия, одно или несколько изменений и инструкции для отката.
Пример полной структуры changeset
<changeSet id="2" author="sidorov"
context="dev,test"
labels="JIRA-123"
runOnChange="false"
runAlways="false"
failOnError="true"
dbms="postgresql">
<!-- Предусловия (опционально) -->
<preConditions onFail="MARK_RAN">
<not>
<tableExists tableName="transactions"/>
</not>
</preConditions>
<!-- Комментарий (опционально) -->
<comment>Создание таблицы транзакций</comment>
<!-- Одно или несколько изменений -->
<createTable tableName="transactions">
<column name="id" type="BIGINT" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="account_id" type="BIGINT">
<constraints nullable="false"
foreignKeyName="fk_transaction_account"
references="accounts(id)"/>
</column>
<column name="amount" type="DECIMAL(19,2)"/>
<column name="created_at" type="TIMESTAMP" defaultValueComputed="CURRENT_TIMESTAMP"/>
</createTable>
<!-- Rollback (опционально) -->
<rollback>
<dropTable tableName="transactions"/>
</rollback>
</changeSet>
Основные атрибуты changeset
| Атрибут | Описание |
|---|---|
id |
Уникальный идентификатор (обязательный) |
author |
Автор изменения (обязательный) |
dbms |
СУБД, для которой применяется changeset (postgresql, oracle, mysql и т.д.) |
context |
Контекст выполнения (dev, test, prod) |
labels |
Метки для фильтрации |
runOnChange |
Перевыполнить, если changeset изменился (по умолчанию false) |
runAlways |
Выполнять при каждом запуске (по умолчанию false) |
failOnError |
Остановиться при ошибке (по умолчанию true) |
logicalFilePath |
Переопределить путь к файлу для расчёта уникальности |
На собеседовании: важно назвать обязательные атрибуты (id, author) и объяснить разницу между runOnChange и runAlways. Частая ошибка — путать эти два атрибута.