代码之家  ›  专栏  ›  技术社区  ›  Igor

如何正确地跟踪SVN对数据库结构的修改?

  •  6
  • Igor  · 技术社区  · 14 年前

    主要问题是数据库结构的版本控制。

    标准的mysqldump和pgèdump实用程序不能生成非常适合版本控制的文件。

     --
    --- TOC entry 2630 (class 0 OID 0)
    +-- TOC entry 2549 (class 0 OID 0)
     -- Dependencies: 6
     -- Name: SCHEMA adm; Type: COMMENT; Schema: -; Owner: admin
    @@ -61,5 +61,5 @@
    

    MySQL差异

    --- Dump completed on 2010-07-20 14:33:44
    +-- Dump completed on 2010-08-11  8:59:39
    Index: /db.sql
    ===================================================================
    --- /db.sql (revision 1274)
    +++ /db.sql (revision 1317)
    @@ -36,5 +36,5 @@
       `message` text,
       PRIMARY KEY  (`id`)
    -) ENGINE=MyISAM AUTO_INCREMENT=21122 DEFAULT CHARSET=utf8;
    +) ENGINE=MyISAM AUTO_INCREMENT=23730 DEFAULT CHARSET=utf8;
    

    5 回复  |  直到 14 年前
        1
  •  6
  •   Mark    14 年前

    看看LiquiBase( http://www.liquibase.org/ )

    它是一个允许开发人员将数据库更改提交到SVN的工具,然后将它们安全地自动应用到数据库。

    它还确保以正确的顺序应用数据库更改,并且只对给定的数据库应用一次。

        2
  •  6
  •   Mark    14 年前

    我们只需对用于从头开始创建数据库的脚本进行版本设置。开发人员在文本文件中编辑脚本,而不是在数据库中。开发人员没有访问生产SQL服务器的权限,DBA团队使用专门设计的工具来比较数据库模式(在我们的例子中是Red Gate SQLCompare),以便进行生产构建。他们将从脚本中创建一个新的空数据库,并使用比较工具来检测更改。有些更改可以自动应用,有些必须手动更改。

    这不是一个完美的系统,但到目前为止对我们来说效果相当好。

        3
  •  2
  •   Lèse majesté    14 年前

    我不会使用MySQL转储,因为它们主要用于数据备份,而您通常不会使用版本控制来管理数据备份。相反,我只需要对安装脚本或用于设置初始数据库结构的SQL文件进行版本控制。

    install.sql 包含了我所有的 CREATE schema.txt 它描述了模式。对于更大的项目,您可能希望使用dbForge之类的工具,它允许在专业版中进行数据库模式版本控制,不过如果您仅使用dbForge的话,它就有点贵了。

    退房 this article

        4
  •  2
  •   Community CDub    7 年前

    Depesz 最近写了一篇关于 HOW TO MANAGE CHANGES TO YOUR DATABASE?

    我会说:

    • 编写脚本来执行所有更改,包括撤消更改的脚本。
    • apgdiff 生成(PostgreSQL)数据库模式差异。
        5
  •  2
  •   Miroslav Å ulc    14 年前

    Another PostgreSQL Diff Tool 用于比较开发模式和生产模式的PostgreSQL数据库。您只需以最适合的方式更新开发数据库。当您想将生产数据库更新到开发数据库的状态时,您需要转储开发数据库模式和生产数据库模式,并让apgdiff来比较它们。它将生成包含将生产数据库转换为开发状态数据库所需的DDL语句的输出。

    事实上,如何将apgdiff部署到开发周期取决于您,它所做的只是使用DDL语句创建输出,将生产数据库“移动”到与开发数据库相同的状态。