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