微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 liquibase 生成生产 sql liquibase 版本控制

如何解决从 liquibase 生成生产 sql liquibase 版本控制

我在 Spring Boot 应用程序上使用了 liquibase 3.8.9 版本进行数据库版本控制,现在我需要为生产环境生成一个 sql(我们无法从应用程序运行 liquibase)。

我有一些最近没有找到答案的问题:

  1. 我可以在没有databasechangelog和databasechangeloglock表的情况下生成sql吗?我认为在生产环境中使用它没有任何价值。

如果没有它们我无法生成,我看到 liquibase 不会为我生成 databasechangelog 和 databasechangeloglock 的创建,我可以配置 liquibase 以生成它们而不定义新的变更集吗?

  1. 在某些变更集中,我的文件位于项目的根目录中,如下所示:

<include file="./liquibase/some-file.xml" relativetochangelogFile="false"/>

当我运行应用程序时,更改集运行良好,但是当我尝试运行 updatesql 时,我收到:

./liquibase/some-file.xml does not exist

我已经包含了根文件夹中的文件,因为它依赖于环境。有没有办法包含文件以将其用于插件

  1. 这是一种生成版本化 sql方法吗?例如,第一个版本应该是 1.0 版,如果我添加一个新列,它应该生成 1.1 版,只有新添加的列,没有 1.0 版的 sql

最好的问候

解决方法

  1. 我可以在没有 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
  1. 你可以使用标签来做到这一点,

liquibase 版本控制

标签命令

tag 命令通常用于通过将标签添加到 DATABASECHANGELOG 表的最后一行来标记当前数据库状态、版本、发布或任何其他信息

我们可以为数据库添加一个带有变更集的标签,如下所示。

在创建标签之前,我们必须按照 liquibase 命令检查标签是否准备就绪

./gradlew tagExists -PliquibaseCommandValue=v1.0.0

我们可以使用以下命令将标签添加到数据库的最后一个变更集

./gradlew tag -PliquibaseCommandValue=v1.0.0

回滚标签命令

回滚命令通常用于恢复在您指定的标记之后对数据库所做的所有更改。

当您运行 rollback 时,Liquibase 将按顺序回滚所有已部署的更改,直到它到达 DATABASECHANGELOG 表中的标记行。

最佳做法是运行 rollbackSQL 命令,它允许您在运行命令之前检查潜在的错误。

./gradlew rollback -PliquibaseCommandValue=v1.0.0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。