Попытка выяснить откат Liquibase с помощью SQL

Пытаюсь разобраться, как работают откаты с форматированным SQL и Liquibase.

Работая с кратким руководством на сайте Liquibase, я смог создать таблицу в своей базе данных. Потом начал работать над откатом. В качестве ручного теста, как только моя таблица была создана, я пометил изменение в таблице DATABASECHANGELOG. Запустил откат Liquibase <mytag>, и он сказал, что успешно завершил его, но таблица не была изменена.

--liquibase formatted sql
--changeset user:1
create table addresses (
address VARCHAR(45),
city VARCHAR(45),
zip VARCHAR(10)
);
--rollback drop table addresses;

Liquibase сообщила, что откат выполнен успешно, но таблица не удалена.


person Rob    schedule 22.08.2019    source источник
comment
Вы можете попробовать запустить updateSQL вместо update. Тогда liquibase выведет SQL на терминал, а не непосредственно в базу данных. Затем примените полученные операторы SQL вручную к БД и посмотрите, работает ли это. Таким образом, вы можете исключить проблемы, выходящие за рамки Liquibase.   -  person Jens    schedule 23.08.2019


Ответы (1)


Концепция тегов в Liquibase многих смущает. Тегирование используется для обозначения заведомо хорошего состояния, поэтому, если вы пометили его после развертывания изменения, которое создало таблицу, а затем сказали откат к этому тегу, он сделал все «правильно» в своем образе мышления.

Вот небольшая часть документации по этому поводу (я добавил ударение на после):

Тег

Указание тега для отката приведет к откату всех наборов изменений, которые были выполнены в целевой базе данных после применения данного тега. См. документацию по «командной строке», чтобы узнать, как пометить базу данных.

Чтобы проверить откат таблицы в вашем примере, вам нужно будет использовать команду rollbackCount или команду rollbackToDate.

person SteveDonie    schedule 23.08.2019