有没有办法以正确的顺序生成 Liquibase 数据?

2024-03-16

我正在使用 Liquibase 对现有数据库进行版本控制,所以我使用

liquibase \
  --logLevel=debug \
  --driver=com.mysql.jdbc.Driver \
  --classpath=lib/mysql-connector-java-5.1.30.jar \
  --url="jdbc:mysql://127.0.0.1:3306/schema" \
  --username=user \
  --password=pass \
  --diffTypes="data" \
  --changeLogFile="./data.xml" generateChangeLog

用于生成变更集 xml。

这是可行的,但问题是当我尝试运行这些生成的变更集时。我明白了

无法添加或更新子行:外键...',因为变更集的导出顺序不考虑外键。

我的问题是:是否有命令选项或可以按正确顺序生成变更集的选项,或者我应该手动重新排序变更集以获得所需的结果?

Update:

通常,外键应该在外键之后创建。但是,在我们的系统中,核心应用程序创建数据库的结构,并且多个客户端应用程序使用同一数据库中自己的私有数据填充数据库。当我们生成数据时,数据变更集是按照数据库中表的字母顺序生成的,这可能是外键约束。我们设法手动安排变更集,但我想知道对于这种特殊情况是否有更好的解决方法。


因此,问题不在于更改类型的顺序(表,然后是数据,然后是 FK),而在于您仅使用生成的数据插入与现有表和 FK 结构? Liquibase 甚至没有尝试弄清楚行如何相互依赖,因为在一般情况下这几乎是不可能的。

最简单的解决方案是在插入之前禁用 FK 检查,然后重新启用它们。如何执行此操作取决于您的数据库,但您可以包含以下内容:

<changeSet id="disable-keys" author="x" runAlways="true">
    <sql>SET FOREIGN_KEY_CHECKS=0;</sql>
</changeSet>

在你之前<insert>标签和

<changeSet id="enable-keys" author="x" runAlways="true">
    <sql>SET FOREIGN_KEY_CHECKS=1;</sql>
</changeSet>

在他们之后。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法以正确的顺序生成 Liquibase 数据? 的相关文章

随机推荐

  • JSP/Servlet 中的倒计时器

    我正在使用 servlet jsp 开发在线考试 我需要在问题页面添加一个倒计时 hh mm ss 计时器 该计时器将结束考试并重定向到结果页面 除了计时器功能之外 我已经完成了所有其他功能 有人可以为此提供一些帮助吗 Thanks 您是否
  • 如何将本地数据存储数据导出到生产 Google App Engine 数据存储

    我想将本地数据存储数据导出到我的 google appengine 应用程序数据存储 有没有直接且简短的方法可以做到这一点 你可以阅读相关内容here http code google com appengine docs python t
  • STM32内部时钟

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT
  • Angular 4 预定表单自动保存

    我正在尝试在 Angular 4 中实现表单数据自动保存 它应该像这样工作 用户更改表单中的某些数据 gt 调用对数据库的某些保存请求 我们假设这里启动了一些计时器 2 秒 在上一个保存请求之后的 2 秒内 所有更改都不会调用任何请求 以减
  • 为什么我的书呆子树有这些奇怪的字符

    尝试让 vim 设置顺利进行 我想让书呆子树发挥最佳状态 但是当我使用它时 它的每个部分前面都有这些字符 V 看起来像这样 V project V tools 我遇到了完全相同的问题 并且能够通过取消注释 UTF 8 并在 etc loca
  • 使用 HTML 和 CSS 扩展大括号

    有没有一种简单的方法可以模拟cases提供的环境amsmath在 LaTeX 中使用 HTML 和 CSS 例如 在 LaTeX 中 可以这样写 documentclass article usepackage amsmath begin
  • SQL Anywhere 11,JZ0C0:连接已关闭

    我开发基于 apache tomcat 6 0 26 apache cxf 2 2 7 spring 3 0 hibernate 3 3 和 sybase sqlanywhere 11 的 Web 服务 我使用 SYBASE jconn j
  • 使用回形针上传多个文件

    我在使用回形针上传多个文件时遇到问题 我的模型是这样的 slider has many imgarrays imgarrays has many imageobjects imageobjects have attachment as fo
  • Android 中的 WorkManager 多次执行 do Work()

    我正在使用 WorkManager 来安排一些任务 但问题是工作管理器在一次调用中多次执行这些任务 doWork 我在用 android arch work work runtime 1 0 0 alpha08 我尝试过使用 alpha07
  • 如何在 Google 云端硬盘中搜索子文件夹和子子文件夹?

    这是一个常见问题 场景是 folderA folderA1 folderA1a folderA2 folderA2a folderA2b 问题是如何列出根目录下所有文件夹中的所有文件folderA 编辑 2020 年 4 月 Google
  • 在 ASP.NET c# 中重定向到另一个页面之前显示 ClientScript 警报?

    我必须在这里解决一个问题 我正在开发一个系统 我不断地向用户显示消息 例如 我正在添加一个新客户端 我输入所有数据并按 保存 在 C 上我所做的就是完成所有保存过程 然后我使用 ClientScript RegisterStartupScr
  • 如何在没有 VS 6.0 的计算机上安装 Microsoft FlexGrid Control 6.0?

    我的 VB NET 应用程序使用 Microsoft Flex Grid Control 6 0 这是一个遗留应用程序 已通过 Visual Studio 转换向导从 VB6 移植 虽然我可以编译程序集 但由于某些类未注册 我收到了 COM
  • For 循环中的 Grunt 运行

    我是咕噜声的新手 我有一个适用于单个构建的 gruntfile 有几个目标链接在一起来完成该过程 问题是我需要使用变量数据创建几个不同的版本 我正在尝试弄清楚如何在我的 gruntfile 中执行此操作 今天 要进行构建 我只需要运行 gr
  • 让 `nosetests` 脚本按 Python 版本选择文件夹

    我曾经有过这个setup cfg file nosetests where test python toolbox 但现在我通过提供两个并行代码库来支持 Python 2 和 Python 3 其中一个位于source py2文件夹和其中一
  • 使用facet_wrap时,geom_bar中的条形有不需要的不同宽度

    我找不到以下问题的解决方案 我非常感谢一些帮助 以下代码使用facet 生成条形图 然而 由于 ggplot2 在某些组中具有 额外空间 即使我指定 0 1 或类似的宽度 它也会使条形变得更宽 我觉得这很烦人 因为它看起来很不专业 我希望所
  • 如何在 C++ 中正确返回数组(类成员)?

    我对 C 还很陌生 所以这可能是一个微不足道的问题 我的类有一个私有成员变量 它是一个数组 我需要返回该数组 但我不确定如何正确执行此操作 class X private double m Array 9 public double Get
  • 这段代码可以防止SQL注入吗?

    背景 我已签约分析现有数据提供者 并且我知道以下代码有错误 但为了指出它有多糟糕 我需要证明它容易受到 SQL 注入的影响 Question 什么 Key 参数可能会破坏PrepareString函数并允许我执行DROP陈述 代码片段 Pu
  • 如何访问网络文件?

    using namespace std ofstream myfile myfile open Z ABC TXT fails Z is a network drive myfile open C Temp ABC TXT OK myfil
  • 为 JavaScript 模块编写 scalajs Facade 时如何使用 JSImport

    我使用 JSImport 编写了一个外观 并且它有效 不幸的是 我通过反复试验找到了解决方案 并且我不完全理解为什么这个特定的解决方案有效 但我尝试过的其他解决方案却无效 背景 我从一个使用 sbt 构建的工作项目开始 它是一个单页应用程序
  • 有没有办法以正确的顺序生成 Liquibase 数据?

    我正在使用 Liquibase 对现有数据库进行版本控制 所以我使用 liquibase logLevel debug driver com mysql jdbc Driver classpath lib mysql connector j