Sql 液化alter列约束

Sql 液化alter列约束,sql,xml,constraints,liquibase,Sql,Xml,Constraints,Liquibase,我想从一个特定的示例开始,在该示例中,创建一个表时,列具有一个约束,该约束指示该列是外键: 现在是第一个问题:假设表B将被重命名为表新。。。我希望如何更改上述约束,使其指向重命名的Tables列ID_PK 我看到了一些可能性: 修改变更集本身(内存数据库中的H2没有问题……但cmon……这不是理想的做法,对吗?) 在我自己的变更集中删除整个列,并使用新的约束再次添加它,因为列名可能会更改为FK_TABLE_new。。。但对于一个高效的环境来说,这并不是一个真正的可能性 以某种方式改变约束-

我想从一个特定的示例开始,在该示例中,创建一个表时,列具有一个约束,该约束指示该列是外键:


现在是第一个问题:假设表B将被重命名为表新。。。我希望如何更改上述约束,使其指向重命名的Tables列ID_PK

我看到了一些可能性:

  • 修改变更集本身(内存数据库中的H2没有问题……但cmon……这不是理想的做法,对吗?)
  • 在我自己的变更集中删除整个列,并使用新的约束再次添加它,因为列名可能会更改为FK_TABLE_new。。。但对于一个高效的环境来说,这并不是一个真正的可能性
  • 以某种方式改变约束->但如何改变!?文件编号为 帮个忙
接下来的问题是,如果存在一个约束,为什么要采用这种约束方式

<addForeignKeyConstraint ...>

还有吗

因此,目前我一点也不觉得自甘堕落,因为这是我第一次尝试更改现有变更集,我最大的问题是:这是一个不理解最佳实践的问题,还是一个“不太冗长”文档的问题

谢谢你的帮助

我尝试的

假设上述约束定义在某种程度上导致与使用时相同

<addForeignKeyConstraint ...>

标记,但属性较少。所以我想我可以用

<dropForeignKeyConstraint ...>

标记首先删除ForeignKeyConstraint,然后添加一个新的约束。但它仍然告诉我,当试图在内存数据库中的H2中执行第一个变更集时,它找不到table_B

我的变更集如下所示:


背景信息


由于我们目前只是使用内存中的DB only(H2)构建POC,所以在我们获得最终方案状态之前,只更改第一个变更集并没有什么大不了的。。。但是,如果你已经有了一个数据库,数百万个入口和其他东西,如何处理这些事情呢?目前,我非常怀疑Liquibase是否是一家拥有1k+开发人员而不雇佣Liquibase专家的公司的正确决定

只有在变更集(与变更集一起使用的软件/数据库)尚未发布时,才应修改变更集

我们将变更集文件(以及代码)保存在源代码存储库中。在开发阶段,每个人都可以更改为当前正在开发的版本定义的变更集

一旦版本发布,变更集文件即被视为已修复,不应再进行更改。(随着版本的发布,软件将被发布,客户将拥有一个反映变更集定义的任何内容的数据库)

因此,在发布之后,您必须创建新的
变更集

  • 删除外键约束
  • 重命名您的表
  • 添加新的外键约束
  • 或多或少,您也需要像在数据库上使用纯sql那样做。
    此时,liquibase将或多或少地将您的变更集转换为sql并将其应用到数据库中。因此,一旦您找到了使用slq进行更改的方法,也应该可以将这些更改放入liquibase更改集中。

    您好,我们目前确实按照您的建议更改了正在开发中的更改集本身。对于发布后的场景,这正是我遇到的问题。但我必须承认,我对液化非常陌生,还没有生成任何SQL。我只是希望文档能告诉我如何将列元素的约束转换为SQL。。。我想在进一步研究Liquibase SQL Outut时会看到这一点。非常感谢您的澄清!我认为这是一个公认的答案,因为我想一旦我们离开inmemory数据库,我就会更好地理解liquibase如何处理更改(并且不会在每个应用程序启动时都丢失所有内容)。再次感谢!例如,数据库本身通常应该处理约束重新指向。您只需重命名目标表即可。对于“如何更改已运行的更改集”的一般情况,@Jens回答“不要,添加到更改集”是正确的。非常感谢您的输入。似乎我还不明白为什么要使用Liquibase,以及在不同的环境中哪些更改要应用于变更集。我将深入探讨它,因为我们公司现在大约有200名开发人员被迫使用它:)在其核心,liquibase只是“部署到生产环境时运行这些SQL命令”word文档的自动版本,具有其他功能。它通过使用每个更改集的id/author/filename标识符跟踪每个更改集,确保每个SQL语句只运行一次(除非您另有指定)。如果你想了解更多信息或背景,可以发电子邮件到nathan的liquibase.org