格式化SQL变更集中的tagDatabase

时间:2015-03-18 15:47:15

标签: liquibase

我尝试标记格式化的SQL变更集,以便将匹配的ID和标记写入DATABASECHANGELOG表(用于回滚目的 - 请参阅下面的变更集片段)。 Phing liquibase任务正用于应用“更新”。命令单个更改日志。

虽然' tagDatabase'属性未列出格式化SQL更改日志(http://www.liquibase.org/documentation/sql_format.html),也不是logicalFilePath,这似乎工作正常!

如果Formatted SQL变更集不支持tagDatabase,有人可以告诉我吗?

非常感谢,

IR8

+++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++

- changeset id:123 logicalFilePath:path-independent ALTER TABLE test1 添加栏目text_column text NULL;

- 回滚ALTER TABLE test1 DROP COLUMN text_column;

- 变更集ID:tag123 tagDatabase:123 ;

+++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++

运行Liquibase时出现意外错误:更改集没有SQL ../ db / changelog / databaseChangeLog.sql :: tag123 :: id

执行目标"迁移"失败的原因如下:C:\ data \ htdocs \ TestLiquibase \ deploy \ build.xml:49:1:Liquibase以代码-1退出

2 个答案:

答案 0 :(得分:0)

我认为它不包括在内。

java类FormattedSqlChangeLogParser负责解析格式化的sql文件,并为此定义了几个PatternslogicalFilePathPattern只有tagDatabase但没有。

答案 1 :(得分:0)

所以这还没有实现。 来自官方文档,

<块引用>

当你运行updateToTag命令或带有liquibase.toTag属性的Maven更新目标,并且在变更日志中有一行对应tagDatabase变更集的DATABASECHANGELOG表中,updateToTag命令或更新Maven目标部署所有变更集从变更日志文件顶部的第一个变更集开始,向下移动到由 tagDatabase 变更类型指定的标签的变更集。

我们可以做一件事,在你执行完所有的 SQL 格式变更集之后,我们可以创建一个新的数据库标签变更集并使用 liquibase 进行更新

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                      http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
    <changeSet author="sivaramr" id="7">
        <tagDatabase tag="v_1.0.0"/>
    </changeSet>
</databaseChangeLog>

如果您正在使用任何 liquibase 命令工具或 liquibase 插件,那么您可以执行 tag 命令将标签添加到最后的更改日志中,如下所示

这里用gradle插件说明。

./gradlew tag -PliquibaseCommandValue=v1.0.0

在执行上述tag命令之前,可以通过tagexists命令来检查tag是否已经存在

./gradlew tagExists -PliquibaseCommandValue=v1.0.0