Какой у вас опыт работы с Liquibase?

Ответ

Опыт: Около 3 лет.

Контекст: Использовал для управления миграциями баз данных в микросервисной архитектуре.

Основные задачи и навыки:

  • Написание changelog-файлов в форматах XML, YAML и SQL.
  • Версионирование миграций и работа с тегами (tagDatabase).
  • Интеграция с Spring Boot через свойства spring.liquibase.*.
  • Выполнение откатов (rollback), в том числе с использованием кастомных SQL-скриптов.
  • Интеграция в CI/CD-процессы для проверки миграций перед деплоем.

Пример (YAML changelog):

databaseChangeLog:
  - changeSet:
      id: 1
      author: dev
      changes:
        - createTable:
            tableName: users
            columns:
              - column:
                  name: id
                  type: BIGINT
                  autoIncrement: true
                  constraints:
                    primaryKey: true

Ответ 18+ 🔞

А, Liquibase, говоришь? Ну, это ж как тот самый Герасим из рассказа — сила есть, а сказать нихуя не может, пока не начнёшь вникать. Три года с ним — это ты, я смотрю, уже на «ты» с этой штукой, да? Не то что эти, которые spring.jpa.hibernate.ddl-auto=update ставят и думают, что они архитекторы баз данных, блядь. Пиздец, волнение ебать.

Ну, в общем, да, задачи стандартные, но без головной боли — нихуя. Писал эти changelog-файлы, конечно. XML — это для мазохистов старых, YAML — уже почеловечески, а SQL — когда совсем всё, блядь, заебало и хочется просто написать ALTER TABLE хуй_с_горы ADD COLUMN пиздец BOOLEAN DEFAULT FALSE;. И всё работает, ёпта.

Версионирование, теги (tagDatabase) — это вообще святое. Без этого как без штанов на параде: вроде идёшь, но все на жопу смотрят и хихикают. Поставил тег перед деплоем — и спишь спокойно, а не бздишь, что откатиться не на что.

С Spring Boot интеграция — ну, классика жанра. Прописал в application.yml:

spring:
  liquibase:
    enabled: true
    change-log: classpath:/db/changelog/db.changelog-master.yaml

И пошло-поехало. Главное — не забыть выключить Hibernate-автогенерацию, а то будет два богатыря на одном коне, и оба в итоге ебнутся.

А вот откаты, блядь... Это отдельная песня. rollback — это как та самая Муму, которую жалко, но приказ есть приказ, сука. Особенно когда кастомные SQL-скрипты для отката пишешь. Чувствуешь себя богом, который может сказать «ой, всё» и отмотать время назад. Но если накосячил в скрипте отката — это пиздец, товарищ. Накрылся медным тазом весь деплой.

В CI/CD встраивал — это правильно. Запускаешь liquibase validate и update на стейджинге перед тем, как в прод тыкать. Лучше тут ошибиться, чем потом в проде руками править, ядрёна вошь. Один раз проебёшься — и потом всю ночь, как Герасим, будешь метаться с мыслью «что же я, мудак, сделал?».

Примерчик твой с YAML — норм, рабочий. Чисто, аккуратно. Видно, что не первый день. Главное — id уникальные не забывай делать, а то получишь конфликт, и Liquibase тебе такое «мууу» скажет, что мало не покажется.

В общем, инструмент, конечно, мощный. Не то чтобы овердохуища сложный, но свои подводные ебучки есть. Три года — срок приличный, ты, я смотрю, уже все грабли прошёл. Уважаю.