我在spring boot应用程序上使用了liquibase 3.8.9版本进行数据库版本控制,现在我需要为生产环境生成一个sql(我们无法从应用程序运行liquibase(。
我有一些问题,我最近没有找到任何答案:
- 我可以在没有databasechangelog和databasechangeloglock表的情况下生成sql吗?我认为在生产环境中使用没有任何价值
如果我不能在没有它们的情况下生成,我看到liquibase不会为我生成数据库更改日志和数据库更改日志锁的创建,我可以配置liquibase来生成它们而不定义新的更改集吗?
- 在一些变更集中,我有位于项目根目录中的文件,如下所示:
<include file="./liquibase/some-file.xml" relativeToChangelogFile="false"/>
当我运行应用程序时,更改集运行得很好,但当我尝试运行updateSQL时,我收到:
./liquibase/some-file.xml does not exist
我包含了根文件夹中的文件,因为它依赖于环境。有没有一种方法可以包含该文件,并将其用于插件?
- 这是生成版本化sql的一种方法吗?例如,第一个版本应该是1.0版,如果我添加一个新列,它应该只生成1.1版,其中添加了新列,而没有1.0版的sql
向致以最良好的问候
- 如果没有databasechangelog和databasechangeloglock表,我可以生成SQL吗?我认为在生产环境中使用没有任何价值
为什么?这两张桌子上摆放着利基巴斯酒的特色。Liquibase使用DATABASECHANGELOG表来跟踪已运行的变更集。
该表将每个变更集跟踪为一行,由"id"、"author"one_answers"filename"列的组合标识。Liquibase使用DATABASECHANGELOGLOCK表来确保一次只运行一个Liquibase实例。基本上,这两个表用于帮助您在不知情的情况下不再运行同一个变更集,并提供一种停止并发访问的机制。
2.在一些变更集中,我有位于项目根目录中的文件,如下所示:当我运行应用程序时,更改集运行得很好,但当我尝试运行updateSQL时,我收到:/liquibase/some-file.xml不存在?
你是如何配置利口酒的。在我的情况下,我配置了带有弹簧靴的liquibase;还添加了liquibasegradle插件。由于这个相对路径问题,我所做的是,将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的版本控制
标记命令
标记命令通常用于通过将标记添加到DATABASECHANGELOG表的最后一行来标记当前数据库状态、版本、发布或任何其他信息
我们可以为数据库添加一个带有变更集的标记,如下所示。
在创建标签之前,我们必须检查标签是否已准备好,方法是按照liquibase命令
./gradlew tagExists -PliquibaseCommandValue=v1.0.0
我们可以使用以下命令将标签添加到数据库的最后一个变更集
./gradlew tag -PliquibaseCommandValue=v1.0.0
回滚标记命令
回滚命令通常用于恢复在指定标记之后对数据库所做的所有更改。
当您运行回滚时,Liquibase将按顺序回滚所有部署的更改,直到它到达DATABASECHANGELOG表中的标记行。
最佳做法是运行rollbackSQL命令,该命令允许您在运行该命令之前检查潜在的错误。
./gradlew rollback -PliquibaseCommandValue=v1.0.0