Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад

Какие таблицы создает Liquibase?

Вопрос проверяет знание внутренних таблиц, которые Liquibase создаёт для отслеживания выполненных изменений базы данных, что необходимо для понимания механизма миграций.

Короткий ответ

Liquibase автоматически создаёт две таблицы в целевой базе данных: DATABASECHANGELOG и DATABASECHANGELOGLOCK. Таблица DATABASECHANGELOG хранит историю всех выполненных изменений (changeSet), включая их идентификатор, автора и контрольную сумму. Таблица DATABASECHANGELOGLOCK используется для предотвращения одновременного запуска нескольких экземпляров Liquibase на одной базе, обеспечивая безопасность миграций.

Длинный ответ

Liquibase — это инструмент для управления изменениями схемы базы данных (миграциями). Для корректной работы ему необходимо отслеживать, какие изменения уже были применены к базе, чтобы не выполнять их повторно и соблюдать порядок. Для этого при первом запуске Liquibase создаёт в целевой базе данных две служебные таблицы.

Основные таблицы Liquibase

  • DATABASECHANGELOG: Это основная таблица журнала изменений. В ней хранится полная история применённых changeSet'ов. Каждая запись соответствует одному выполненному изменению из файла changelog.
  • DATABASECHANGELOGLOCK: Это таблица блокировки. Она используется для обеспечения того, что в один момент времени только один экземпляр Liquibase может применять изменения к базе данных, что критически важно в распределённых или многопоточных средах.

Структура и назначение таблиц

Таблица DATABASECHANGELOG содержит такие поля, как ID, AUTHOR, FILENAME (идентифицирующие changeSet), DATEEXECUTED (время применения), MD5SUM (контрольная сумма для обнаружения изменений в уже применённом скрипте) и EXECTYPE (тип выполнения, например, EXECUTED). Liquibase проверяет эту таблицу перед каждым запуском, чтобы определить, какие изменения нужно применить.

Таблица DATABASECHANGELOGLOCK обычно содержит поля ID (первичный ключ), LOCKED (флаг блокировки), LOCKGRANTED (время получения блокировки) и LOCKEDBY (кто захватил блокировку). Если процесс Liquibase завершится аварийно, блокировка может остаться установленной, и её потребуется сбросить вручную.

Пример кода и применение

При запуске Liquibase впервые с командой update он выполнит SQL, подобный следующему (на примере PostgreSQL):

CREATE TABLE public.databasechangelog (
    id VARCHAR(255) NOT NULL,
    author VARCHAR(255) NOT NULL,
    filename VARCHAR(255) NOT NULL,
    dateexecuted TIMESTAMP NOT NULL,
    orderexecuted INTEGER NOT NULL,
    exectype VARCHAR(10) NOT NULL,
    md5sum VARCHAR(35),
    description VARCHAR(255),
    comments VARCHAR(255),
    tag VARCHAR(255),
    liquibase VARCHAR(20),
    contexts VARCHAR(255),
    labels VARCHAR(255),
    deployment_id VARCHAR(10)
);

CREATE TABLE public.databasechangeloglock (
    id INTEGER NOT NULL,
    locked BOOLEAN NOT NULL,
    lockgranted TIMESTAMP,
    lockedby VARCHAR(255),
    CONSTRAINT pk_databasechangeloglock PRIMARY KEY (id)
);

INSERT INTO databasechangeloglock (id, locked) VALUES (1, FALSE);

Эти таблицы создаются автоматически, и разработчику обычно не нужно взаимодействовать с ними напрямую. Однако понимание их структуры полезно для отладки проблем с миграциями, например, при конфликтах контрольных сумм (MD5SUM) или "зависших" блокировках.

Вывод: Таблицы DATABASECHANGELOG и DATABASECHANGELOGLOCK являются фундаментальным механизмом отслеживания состояния базы данных в Liquibase. Их знание необходимо для эффективного управления миграциями и решения проблем в production-средах.

Уровень

  • Рейтинг:

    2

  • Сложность:

    4

Навыки

  • SQL

Ключевые слова

#Liquibase

#database changelog

#databasechangelog

#databasechangeloglock

#migration tracking

Подпишись на Java Developer в телеграм