Ответ
Liquibase — это инструмент для контроля версий и управления изменениями схемы базы данных. Скрипты (changeSets) можно писать в форматах XML, YAML, JSON или чистого SQL.
Ключевые концепции и элементы:
- ChangeSet — атомарное, идемпотентное изменение (например, создание таблицы, добавление столбца). Выполняется только один раз для конкретной базы данных.
- Preconditions — условия, которые проверяются перед выполнением changeSet.
- Rollback — инструкции для отката изменений, описанных в changeSet.
- DATABASECHANGELOG — служебная таблица, в которой Liquibase отслеживает выполненные изменения.
Пример changeSet в XML:
<changeSet id="create-users-table" author="dev">
<createTable tableName="users">
<column name="id" type="BIGINT" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="username" type="VARCHAR(50)">
<constraints nullable="false"/>
</column>
</createTable>
<rollback>
<dropTable tableName="users"/>
</rollback>
</changeSet>
Best Practices:
- Идемпотентность: Каждый changeSet должен быть написан так, чтобы его можно было выполнить безопасно много раз.
- Атомарность: Один changeSet — одна логическая операция.
- Поддержка разных СУБД: Используйте атрибут
dbmsдля указания целевой базы данных (например,dbms="postgresql,mysql"). - Сложные миграции: Для массовых обновлений данных или сложной логики используйте тег
<sqlFile>для подключения нативного SQL-скрипта, что обеспечивает большую гибкость и производительность.