2016-04-27 39 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/

,而不是事後計算版本之間的增量,遷移可以用來發展模式以可控的方式。您可以創建可以跟蹤代碼(以及分叉/合併)的特定於功能的遷移。

根據你想要得到多麼好看,你可能需要擴展默認的命名/編號方案。