Gymterview
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 в реальных проектах.