我想为我的变更集设置标签,以便在需要时再次回滚到此变更集。
所以我想知道如何将标签设置为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 中没有任何东西可以直接支持这样做。
使用 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'
类型声明。
您不能将 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\}$//')