我有以下问题:我需要为生产中的数据库生成迁移文件。目前我使用的是ant和以下ant任务:
<liquibase:updateDatabase changeLogFile=db.changelog-master.xml" databaseRef="oracle-database" outputFile="out_ora.sql" />但是我的文件包含了DATABASECHANGELOG表的insert语句。如果没有这个语句,我如何产生输出文件?(我不想手动或稍后通过脚本删除此语句)。
发布于 2015-06-24 05:50:50
您可以使用此扩展名:https://github.com/liquibase/liquibase-nochangelogupdate
只需将jar添加到您的类路径中,liquibase将不会输出任何数据库classpath
发布于 2016-02-27 01:22:12
如果要过滤insert/update from ChangeSets,而不考虑只保留Create、Alter脚本的Liquibase Insert/update语句。
定义包含要排除的类的列表的属性
sqlgenerator.exclude=liquibase.statement.core.InsertOrUpdateStatement,liquibase.statement.core.InsertStatement,liquibase.statement.core.UpdateStatement,liquibase.statement.core.GetNextChangeSetSequenceValueStatement,liquibase.statement.core.MarkChangeSetRanStatement,liquibase.statement.core.RemoveChangeSetRanStatusStatement,liquibase.statement.core.UpdateChangeSetChecksumStatement实现过滤所有SQL语句的SQL生成器类属于上面列出的类类别。
Spring将属性注入到类中。确保在"liquibase.sqlgenerator.ext“包下创建类。
@Component
public class FilteredSQLGenerator extends AbstractSqlGenerator<AbstractSqlStatement> {
private static final Logger LOGGER = Logger.getLogger(FilteredSQLGenerator.class);
private static String[] excludeArr = new String[0];
@Value("${sqlgenerator.exclude}")
private String exclude;
@PostConstruct
public void init() {
LOGGER.debug(" Exclude List set to : " + exclude);
if (StringUtils.isNotBlank(exclude)) {
excludeArr = StringUtils.split(exclude, ',');
}
}
@Override
public ValidationErrors validate(AbstractSqlStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) {
return sqlGeneratorChain.validate(statement, database);
}
@Override
public int getPriority() {
return 1000;
}
@Override
public Sql[] generateSql(AbstractSqlStatement statement, Database database, SqlGeneratorChain sqlGeneratorChain) {
String clazzName = statement.getClass().getName();
for (String exclude : excludeArr) {
if (exclude.equals(clazzName)) {
return new Sql[0];
}
}
return sqlGeneratorChain.generateSql(statement, database);
}
}https://stackoverflow.com/questions/30557559
复制相似问题