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

时间:2010-08-30 16:14:55

标签: mysql database svn postgresql versioning

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

标准的mysqldump和pg_dump实用程序不能生成非常适合版本化的文件。

dump命令生成包含自动增量值,TOC条目等的转储文件。由于这些对象会不断变化,因此总会产生巨大的差异文件。

PostgreSQL Diff

 --
--- 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 Diff

--- 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 个答案:

答案 0 :(得分:6)

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

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

通过比较两个数据库,或者由开发人员手动编码并提交,可以对更改进行逆向工程。

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:2)

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

对于小型项目,我通常只有一个名为install.sql的文件,其中包含我的所有CREATE语句和schema.txt,用于描述架构。对于较大的项目,您可能希望使用类似dbForge的东西,它允许在专业版中进行数据库模式版本控制,但如果您正在使用它,则有点贵。

在Coding Horror上查看this article(特别是该帖子中的第一个链接)以获取更多指导。

答案 3 :(得分:2)

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

的博客文章

我会说:

  • 如果您只是将每个对象的架构存储在SVN中,您仍然需要部署具有订购依赖关系和数据修改的更改,因此所有真正购买的内容都是将更改历史记录归类为所涉及的对象。
  • 编写脚本以执行所有更改,包括撤消更改的脚本。
  • 使用apgdiff生成(PostgreSQL)数据库架构差异。

答案 4 :(得分:2)

您可以将免费Another PostgreSQL Diff Tool用于PostgreSQL数据库,以比较您的开发架构和生产架构。您只需以最舒适的方式更新开发数据库。如果要将生产数据库更新到开发数据库的状态,请执行转储开发数据库模式和生产数据库模式,并让apgdiff进行比较。它将生成包含将生产数据库转换为开发数据库状态所需的DDL语句的输出。

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

在网站上,您可以找到有关它如何工作,如何使用它,支持哪些语句等信息。还有一篇关于PostgreSQL架构升级的文章在我的博客www.fordfrog.n​​ame上(我被允许只包括一个链接所以也无法建立这个地址链接。)