主要问题是数据库结构的版本控制。
标准的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;
对于更好的版本控制方式的任何建议/链接/实用程序表示赞赏!
谢谢。
答案 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?”
的博客文章我会说:
答案 4 :(得分:2)
您可以将免费Another PostgreSQL Diff Tool用于PostgreSQL数据库,以比较您的开发架构和生产架构。您只需以最舒适的方式更新开发数据库。如果要将生产数据库更新到开发数据库的状态,请执行转储开发数据库模式和生产数据库模式,并让apgdiff进行比较。它将生成包含将生产数据库转换为开发数据库状态所需的DDL语句的输出。
实际上,由您决定如何将apgdiff部署到开发周期中,它所做的就是使用DDL语句创建输出,以将生产数据库“移动”到与开发数据库相同的状态。
在网站上,您可以找到有关它如何工作,如何使用它,支持哪些语句等信息。还有一篇关于PostgreSQL架构升级的文章在我的博客www.fordfrog.name上(我被允许只包括一个链接所以也无法建立这个地址链接。)