【问题标题】:How can I include database changes (DDL patches, one-time data inserts, etc) in my build process?如何在构建过程中包含数据库更改(DDL 补丁、一次性数据插入等)?
【发布时间】:2026-01-15 13:20:32
【问题描述】:

我运行我的构建脚本,然后我必须记住每次部署我的应用程序时要运行哪个数据库 SQL 和 PL/SQL 脚本。如何在我的构建脚本中包含这些补丁?还是每个人都只是手动运行它们?目前我为我的补丁编号,所以我知道运行它们的顺序,但有时我必须检查 SVN 历史才能知道从哪个编号开始。

我正在使用 PHP,但可以在我的解决方案中使用 Java。

【问题讨论】:

    标签: sql continuous-integration build-automation ddl


    【解决方案1】:

    liquibase 可能会为您解决这个问题,它集成到 ant 或 maven 中,但也可以从 cmd 行启动

    【讨论】:

      【解决方案2】:

      您应该将您的更改保存为脚本,并像其他代码一样将它们置于源代码管理中。然后你就知道哪些变化属于什么构建,需要提升为产品。

      【讨论】:

      • +1。我下一步:trunk/Database/Patches/0.9.2 to 0.9.3/x_table.sql
      • 我将脚本放在源代码管理中,但我还没有找到令人满意的方法来跟踪哪些脚本已运行,哪些未运行。我想将它们放在像 abatischev 建议的应用程序版本文件夹名称中是一种选择,但仍然有一个手动组件。
      • 我想知道是否使用扩展属性来存储对象的版本并在推送更改之前对其进行测试?或者理想的解决方案是否应该不涉及数据库?
      【解决方案3】:

      既然您使用的是 PHP,phing/DbDeployTask 将是一个明智的选择。对于每个数据库表,您将有一个起始文件和一些补丁,例如:

      001 user.sql
      002 project.sql
      501 user-AddColumnAvatar.sql
      

      等等

      【讨论】: