如何将标签设置为SQL格式的变更集以运行rollbackTag Liquibase Maven?

问题描述 投票:0回答:2

我想为我的变更集设置标签,以便在需要时再次回滚到此变更集。

所以我想知道如何将标签设置为SQL格式的变更集。

提前致谢。

这是我的数据库更改日志表。

数据库变更日志表

这是我的变更日志文件(标签不起作用,我也尝试过 tagDatabase:"version_3.0" 但也不起作用):

--liquibase formatted sql

--changeset yusuf:5 -tag:"version_3.0"

create table test_table2 (test_id INT, test_column VARCHAR, PRIMARY KEY (test_id))

这是我的 pom.xml liquibase 插件:

    <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>4.2.0</version>
            <configuration>
                <propertyFile>src/main/resources/liquibase.properties</propertyFile>
            </configuration>
                    <goals>
                        <goal>update</goal>
                        <goal>tag</goal>
                    </goals>
   </plugin>
sql database-migration liquibase rollback liquibase-maven-plugin
2个回答
1
投票

目前在格式化的 sql 中没有任何东西可以直接支持这样做。

使用 xml/yaml/json,我们可以将

<tag>
更改包含在更改集中,但格式化的 sql 明确不支持这些更改,因为它专注于“脚本中包含所有逻辑,而不依赖于任何 liquibase 魔法”
<tag>
陷入。

标签所做的只是标记数据库变更日志表的

tag
列中最后运行的变更集。所以你可以做这样的事情:

--liquibase formatted sql

--changest yusuf:5
create table test_table2 (test_id INT, test_column VARCHAR, PRIMARY KEY (test_id))

--changeset yusuf:6 -tag:"version_3.0"
update databasechangelog t set tag='version_3.0' where .... 

其中更新语句将是特定于您的数据库的内容。您可以为“具有最高执行日期、执行订单值的行”提出正确的语法,但这可能会变得复杂。您可以通过运行 logLevel=fine 的

liquibase tag
命令来获取数据库使用的内容并查看它。

或者,如果您知道它在变更日志文件中的位置以及它的使用方式,您可以执行更简单的

where id='5' and author='yusuf' and path='my/file.sql'
类型声明。


0
投票

您不能将 tagDatabase 与 SQL 格式的变更集一起使用。

但是,您可以而且应该在应用迁移后使用

liquibase tag --tag=myTag
命令来标记您的迁移,如此处所示。

注意:最佳实践是在对数据库运行任何其他命令之前标记更改集。

就我而言,我在管道中运行 liquibase。这是文件夹结构:

.
├── changelogs
│   ├── changelog-1.0.sql
│   ├── changelog-1.1.sql
│   └── changelog-1.2.sql
└── db.changelog-master.yaml

我从最新的文件名中提取标签。以下是命令:

liquibase
--url=<DATABASE_URL>
--username=<DATABASE_USERNAME>
--password=<DATABASE_PASSWORD>
--classpath=<PATH-TO-MASTER-CHANGELOG>
--changeLogFile=db.changelog-master.yaml
update
&& liquibase
--url=<DATABASE_URL>
--username=<DATABASE_USERNAME>
--password=<DATABASE_PASSWORD>
tag --tag=$(ls -r <PATH-TO-CHANGELOGS> | head -1 | grep -o '[^-]*.sql$' | sed 's/.\{4\}$//')
© www.soinside.com 2019 - 2024. All rights reserved.