2012-10-02 41 views
5

我正在使用grails 2.0.3,數據庫遷移(liquibase)插件1.1和postgres 9.1。Liquibase:關係「databasechangeloglock」已經存在,使用grails插件和非默認模式

我看到了什麼,我認爲是這些其他用戶所描述的相同的問題,而是有皺紋:

皺紋是:

  1. 我正在使用grails和數據庫遷移插件。
  2. 生產數據庫不使用默認模式。
  3. 必須使用啓動時的自動數據庫遷移(grails.plugin.databasemigration.updateOnStart = true),因爲沒有開發人員有權訪問實際的生產數據庫。

我對這個問題的理解是,liquibase正在檢查其維護表存在的默認模式,然後嘗試在正確的地方創建表,即非默認模式。但是它們當然在第一次執行後就已經存在了。通過指定一個命令行選項似乎有一個解決方法,但我沒有這個選項,因爲需要在部署的grails應用程序內自動運行。

有沒有辦法讓數據庫遷移插件做我需要的?告訴DBA以不同方式組織模式不是一種選擇。

由於提前, 雷A.康納

回答

3

前提條件和重構命令取的屬性SCHEMANAME。

<tableExists schemaName="myschema" tableName="..."/> 
<createTable schemaName="myschema" tableName="..."/> 

你也可以參數化的:

<databaseChangeLog ..> 
    <property name="schema.name" value="myschema"/> 
    .... 
    <changeset ...> 
    <createTable schemaName="${schema.name]" tableName="..."/> 
    </changeset> 
</databaseChangeLog> 

對於Liquibase本身,你可以設置defaultSchemaName,你的情況(Grails的)這應該是:

grails.plugin.databasemigration.updateOnStartDefaultSchema 
+0

這是在重構表我的應用程序的架構。這個問題是由liquibase自己創建的表格來保存變更集和內部鎖定的。 –

+0

也增加了你的情況。 –

+1

我已經將工作留在了這是一個問題,我還沒有能夠設置一個環境來驗證您的編輯。希望不久之後,我將能夠做到這一點。 –