2014-11-02 82 views
0

我們使用postgres數據庫在java中製作了一個系統。 此數據庫經常更改,每週更新一次或更少,我們正在更新它。這些更改位於DB(DDL)的結構中,通常位於功能和字段中以添加新功能。在postgres中自動構建腳本以更新數據庫

對於數據庫中的更改,我們通常使用navicat,如下所示: 1-我們使用navicat對數據庫結構進行了更改,並將我們所做的每個更改都提供給我們的SQL複製到XML文件中。 2-當我們必須更新生產數據庫時,我們檢查由版本號標識的文件並更新數據庫。 3-然後我們對每個安裝的數據庫重複這一步(總共30個)

我們遇到的問題是整個過程是手動的,並且很容易忘記將更改複製到XML中,所以當我們使用它的腳本不起作用,或者甚至在系統需要此更改失敗時更糟糕。

因此,我們正在尋找一種方式來自動完成這個任務,我們想出了以下的想法: 1 - 我們做在Navicat變化 2-配置的Postgres到日誌中的DDL的變化到CSV文件中 3 - 稍後我們讀取CSV文件並將更改傳遞到XML以更新制作DB

我們遇到的問題是LOG將保存所有嘗試更改結構,包括錯誤,因此如果我們使用該腳本更新它也會失敗。

有沒有辦法在postgres的日誌中只保存成功的DDL更改?

是否有腳本或應用程序來獲取DDL更改並將其自動放置在腳本中?

有沒有更好的方法來自動化這個過程?

+0

我建議你修改你的問題更簡潔。 – gsamaras 2014-11-02 02:53:43

回答

1

對於上述問題有很多答案:-)我已經使用多種方案管理了快速變化的數據庫。一種方法是維護一個主數據庫(就像你一樣)。使用dbtoyaml創建數據庫的yaml描述。然後在所有(30)目標上使用yamltodb,這將完成使目標數據庫看起來完全像主服務器所需的一切。我已經使用了這個軟件約6個月,這太棒了。 pyrseas。 -g

+0

我嘗試它,但它不支持與setof和觸發器功能的功能。你用pip使用安裝的版本來編譯fron git? – 2014-11-02 21:58:48

+0

據我所知,它支持postgres中的所有內容。如果沒有,這是一個錯誤。 – Greg 2014-11-03 00:23:45

+0

最新版本正常工作,我現在就使用它。謝謝 – 2015-08-15 14:22:31