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

Igo*_*gor 6 mysql database svn versioning postgresql

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

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

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

PostgreSQL差异

 --
--- 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 @@
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

有关更好的版本控制方式的任何建议/链接/实用程序表示赞赏!

谢谢.

Mar*_*itt 6

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

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

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

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


Mar*_*ark 6

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

它不是一个完美的系统,但到目前为止它对我们来说相当不错.

  • 我同意.如果开发人员要使用数据库,他们应该能够从头开始编写表创建脚本,而不必运用太多的脑细胞.如果他们不能,也许他们应该让数据库工作给更合格的人.话虽这么说,我没有任何问题,有人使用他们喜欢的任何工具将脚本放在一起,但在一天结束时,它要么被检查到subversion,要么它没有被部署. (3认同)