2016-04-27 40 views
2

作为我公司的首席开发人员,我已经开发了几年的网络安全应用程序。这是一种分体式架构设计,其中一个组件驻留在客户的网络中,另一个组件驻留在我们自己的云中。我们开发了我们自己的定制版本控制系统,可以在每个补丁(每个客户)保持双方同步,但到目前为止,它只允许进行增量更改,并且不可能进行回滚。分叉(postgre)SQL数据库结构

我们希望转移到我们的代码的类似git的解决方案,以便我们可以同时开发和测试多个功能,但是让我们失望的是我们的数据库。我们使用PostgreSQL(目前为9.3.12),并且每次我们创建一个补丁时,我都写了一个自定义脚本来计算“旧”和“新”数据库结构之间的增量。它列出了必须更新“旧”数据库结构以使其看起来像“新”的SQL命令列表,包括表格,函数,序列,触发器等等。这是非常优雅,几乎永远不会失败,即使有复杂的三角洲。

但是,我意识到为了让这种类似git的解决方案(检出,签入,将更改合并到测试代码和生产代码等中),同时保持数据库更改与应用程序代码同步,我们需要比“旧”和“新”更先进的东西。请注意,我们不需要修改大部分数据库数据,只需要修改现有客户数据库上的表结构。

所以我的问题是这样的:git-like SQL版本控制系统的任何想法,它允许分叉和合并,并且可以很容易地保持与应用程序代码更改同步?我们的自定义工具已经比我们研究过的一些开源工具(比如sqlt-diff)更高级一些,像Red Gate这样的工具在我们的价格范围内有点超出了初创公司的范围(更不用说了我没有听说任何人提及与红门的情况)。我们愿意编写一个自定义工具,如果这是我们需要做的,但我们正在摸索我们从哪里开始。我们知道如何计算三角洲,但我们不知道如何管理不同叉子上的所有这些东西。

免费或开源工具,我们可以适应的框架或者构建这些工具的一般指导原则都是值得赞赏的!

+1

我还没有以这种方式与他们合作,但可能SQLAlchemy/Alembic可能具有与您需要的功能相关的功能:http://alembic.readthedocs.org/en/latest/branches.html – bimsapi

回答

0

解决此问题的一种方法是迁移。一对夫妇的轻量级的工具,但也有许多人:

http://sequel.jeremyevans.net/rdoc/files/doc/migration_rdoc.html

https://flywaydb.org/

,而不是事后计算版本之间的增量,迁移可以用来发展模式以可控的方式。您可以创建可以跟踪代码(以及分叉/合并)的特定于功能的迁移。

根据你想要得到多么好看,你可能需要扩展默认的命名/编号方案。