Liquibase генерирует журнал изменений в БД на основе префикса имени таблицы - PullRequest
2 голосов
/ 29 января 2020

Могу ли я сгенерировать список изменений Liquibase из БД на основе префикса имени таблицы.

Пример: Если у меня есть схема БД и в ней есть следующие таблицы:

abc
abcd
abcdef
xyz

Я просто хочу создать ChangeLog для таблиц, начинающихся с "ab c". Итак, список изменений для таблиц

ab c, abcd, abcdef

Может кто-нибудь помочь мне, если есть способ сделать это?

1 Ответ

2 голосов
/ 29 января 2020

Это возможно с командной строкой maven или liquibase, если вы используете версию liquibase> 3.3.2.

Ознакомьтесь с примечаниями к выпуску

Liquibase 3.3.2 официально выпущен. Это, прежде всего, версия с исправлением ошибок, но у нее есть одна важная новая функция: объект diffChangeLog / generateChangeLog фильтрация объектов. includeObjects / excludeObjects logi c

Теперь вы можете установить параметр includeObjects или excludeObjects в командной строке или Ant. Для maven параметрами являются diffExcludeObjects и diffIncludeObjects. Формат этих параметров:

An object name (actually a regexp) will match any object whose name matches the regexp.
A type:name syntax that matches the regexp name for objects of the given type
If you want multiple expressions, comma separate them
The type:name logic will be applied to the tables containing columns, indexes, etc.

ПРИМЕЧАНИЕ. При сравнении имен учитывается регистр. Если вы хотите нечувствительные логики c, используйте флаг (? I) regexp.

Примеры фильтров:

“table_name” will match a table called “table_name” but not “other_table” or “TABLE_NAME”
“(i?)table_name” will match a table called “table_name” and “TABLE_NAME”
“table_name” will match all columns in the table table_name
“table:table_name” will match a table called table_name but not a column named table_name
“table:table_name, column:*._lock” will match a table called table_name and all columns that end with “_lock”

Поэтому попробуйте использовать параметры excludeObjects или includeObjects с помощью команды generateChangeLog

ОБНОВЛЕНИЕ

Я использовал командную строку liquibase, и эта команда добивается цели (для mysql базы данных):

liquibase 
--changeLogFile=change.xml 
--username=username 
--password=password 
--driver=com.mysql.cj.jdbc.Driver 
--url=jdbc:mysql://localhost:3306/mydatabase
--classpath=mysql-connector-java-8.0.18.jar 
--includeObjects="table:abc.*" 
generateChangeLog
...