spring - 从 liquibase 生成生产 sql
问题描述
我在我的 Spring Boot 应用程序上使用 liquibase 3.8.9 版本进行数据库版本控制,现在我需要为生产环境生成一个 sql(我们无法从应用程序运行 liquibase)。
我有一些我最近没有找到答案的问题:
- 我可以在没有 databasechangelog 和 databasechangeloglock 表的情况下生成 sql 吗?我认为在生产环境中使用它没有任何价值。
如果没有它们我无法生成,我看到 liquibase 不会为我生成 databasechangelog 和 databasechangeloglock 的创建,我可以配置 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 的特性就在这两张表上。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 表的最后一行添加标记来标记当前数据库状态、版本、版本或任何其他信息
我们可以为数据库添加一个带有变更集的标签,如下所示。
在创建标签之前,我们必须通过 liquibase 命令检查标签是否已准备好
./gradlew tagExists -PliquibaseCommandValue=v1.0.0
我们可以使用以下命令将标签添加到数据库的最后一个变更集
./gradlew tag -PliquibaseCommandValue=v1.0.0
回滚标签命令
rollback 命令通常用于还原在您指定的标记之后对数据库所做的所有更改。
当您运行 rollback 时,Liquibase 将按顺序回滚所有已部署的更改,直到它到达 DATABASECHANGELOG 表中的标记行。
最佳实践是运行 rollbackSQL 命令,该命令允许您在运行命令之前检查潜在的错误。
./gradlew rollback -PliquibaseCommandValue=v1.0.0
推荐阅读
- ruby-on-rails - 如何使用 Stripe 在我的 Rails 应用程序中添加现有用户
- ubuntu - 用 ffplay 播放音频似乎忽略了波形的幅度
- c# - 无法更改按钮高度 WPF
- docker - 获取 docker:Jenkins docker build agent 中的无效参考格式
- sql - 填补 PostgreSQL 上 SQL 查询中缺失的日期空白
- batch-file - 如何增加用户输入为每一行输入的数字
- python - 将字典值转换为列表在函数中不起作用
- json - 嵌套的 JSON 值显示在调试器中,但从工厂方法返回为 null
- node.js - 具有多态对象引用和验证的 Mongoose 模型
- javascript - 如果循环未在给定时间内完成,如何打破“for await ...of”循环?