- 可以在没有databasechangelog 和databasechangeloglock 表的情况下生成SQL 吗?我认为在生产环境中使用它没有任何价值?
为什么? liquibase 的特性就在这两张表上。 Liquibase 使用 DATABASECHANGELOG 表来跟踪哪些变更集已经运行。
该表将每个变更集跟踪为一行,由“id”、“author”和“filename”列的组合标识。 Liquibase 使用 DATABASECHANGELOGLOCK 表来确保一次只运行一个 Liquibase 实例。基本上,这两个表用于帮助您不要在您不知情的情况下再次运行相同的变更集,并提供一种停止并发访问的机制。
2.在某些更改集中,我在项目的根目录中有文件,如下所示:
当我运行应用程序时,更改集运行良好,但是当我尝试运行 updateSQL 时,我收到:./liquibase/some-file.xml 不存在?
您是如何配置 liquibase 的。就我而言,我已经使用 spring boot 配置了 liquibase 并且还添加了 liquibase gradle 插件。
由于这个相对路径问题,我所做的是,将changelog的logicalFilePath更改为如下,并且还使用了相对路径文件。
<?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.4.xsd"
logicalFilePath="schema/15-01-changelog-comment-order-header-table.xml">
<changeSet id="10" author="sivaramr" dbms="postgresql" context="dev,qa,prod">
<changeset> ... </changeset>
</changelog>
当您配置主变更日志文件时,不要同时配置路径,而是使用默认路径。
spring.liquibase.change-log=classpath:db/changelog/changelog-master.xml
- 你可以使用标签来做到这一点,
使用 liquibase 进行版本控制
标签命令
tag 命令通常用于通过在 DATABASECHANGELOG 表的最后一行添加 tag 来标记当前数据库状态、版本、版本或任何其他信息
我们可以为数据库添加如下变更集的标签。
在创建标签之前,我们必须通过 liquibase 命令检查标签是否准备就绪
./gradlew tagExists -PliquibaseCommandValue=v1.0.0
我们可以使用以下命令将标签添加到数据库的最后一个变更集
./gradlew tag -PliquibaseCommandValue=v1.0.0
回滚标签命令
回滚命令通常用于恢复在您指定的标记之后对数据库所做的所有更改。
当您运行 rollback 时,Liquibase 将依次回滚所有已部署的更改,直到它到达 DATABASECHANGELOG 表中的标记行。
最佳实践是运行 rollbackSQL 命令,它允许您在运行命令之前检查潜在的错误。
./gradlew rollback -PliquibaseCommandValue=v1.0.0