junior
Какие форматы changelog поддерживает Liquibase?
Liquibase поддерживает четыре формата описания changelog: XML, YAML, JSON и SQL.
XML
Самый распространённый и документированный формат. Поддерживает XSD-валидацию.
Пример XML changelog
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
<changeSet id="1" author="petrov">
<createTable tableName="accounts">
<column name="id" type="BIGINT" autoIncrement="true">
<constraints primaryKey="true"/>
</column>
<column name="balance" type="DECIMAL(19,2)"/>
</createTable>
</changeSet>
</databaseChangeLog>
YAML
Более компактный и читаемый формат.
Пример YAML changelog
databaseChangeLog:
- changeSet:
id: 1
author: petrov
changes:
- createTable:
tableName: accounts
columns:
- column:
name: id
type: BIGINT
autoIncrement: true
constraints:
primaryKey: true
- column:
name: balance
type: DECIMAL(19,2)
JSON
Альтернативный формат, используется реже.
Пример JSON changelog
{
"databaseChangeLog": [
{
"changeSet": {
"id": "1",
"author": "petrov",
"changes": [
{
"createTable": {
"tableName": "accounts",
"columns": [
{
"column": {
"name": "id",
"type": "BIGINT",
"autoIncrement": true,
"constraints": { "primaryKey": true }
}
}
]
}
}
]
}
}
]
}
SQL
Для тех, кто предпочитает писать чистый SQL. Метаданные указываются в комментариях.
Пример
--liquibase formatted sql
--changeset petrov:1
CREATE TABLE accounts (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
balance DECIMAL(19,2)
);
--rollback DROP TABLE accounts;
На практике в банковских проектах чаще всего используют XML (как наиболее формализованный и поддающийся валидации) или YAML (за компактность).
На собеседовании: достаточно перечислить четыре формата и знать, что XML — самый распространённый. Частая ошибка — не упомянуть SQL-формат, хотя именно его часто комбинируют с XML в реальных проектах.