2015-06-30 31 views
2

我嘗試將Liquibase從舊版本2.0.5遷移到3.4.0。我想的第一件事是狀態命令,是什麼導致了一個問題表的讀數 'databasechangelog':Liquibase從2.0.4遷移到版本3.4.0後缺少列'CONTEXTS'

執行錯誤SQL SELECT 文件名,作者,ID,MD5SUM,DATEEXECUTED,ORDEREXECUTED,EXECTYPE,描述,評論,TAG,LIQUIBASE,標籤,上下文 FROM IDENTSERVICE.DATABASECHANGELOG ORDER BY DATEEXECUTED ASC, ORDEREXECUTED ASC:ORA-00904: 「上下文」

我似乎是在表中兩個新列:標籤和CONTEXTS Lquibase網站告訴它,它只是一個簡單的替代品。

所以我的問題:我需要去拳頭3.0.0版,或者我如何獲得新的列?手動操作不是一種選擇。

回答

1

該解決方案未運行狀態命令,但運行正常的更新命令。 要小心,你不能回到舊版本的Liquibase。舊版本會丟失校驗和錯誤。

+0

Liquibase 3.4.1修復了這個問題,以便您現在可以在運行更新之前運行狀態。 –

2

結帳´StandardChangeLogHistoryService´類。

搜索hasContexts例如有代碼檢查這些列是否在那裏。 因此,如果列CONTEXTS的測試失敗,則應該有一條日誌行,該行寫道:

"Adding missing databasechangelog.contexts column"

你可以檢查你的日誌。

所以,是的,它應該是一個直接替代品。

+0

您提到的日誌條目我無法找到。我使用選項_-- logLevel = debug_ 將日誌級別設置爲調試我瞭解到liquibase首先連接到數據庫,然後加載_dbchangelog-2.0.xsd_。緊接着它查詢失敗的表_DATABASECHANGELOG_。 – Eric

+0

是的,但我認爲檢查現有的'CONTEXT'和'LABEL'列是在['tandardChangeLogHistoryService'](https://github.com/liquibase/liquibase/blob/master/)的init() liquibase-core/src/main/java/liquibase/changelog/StandardChangeLogHistoryService.java)類。我假設這是在查詢DATABASECHNAGELOG表之前運行的。但是,也許你在liquibase中發現了一個錯誤?我沒有一個測試場景來重現這一點,所以我不能真正知道...... – Jens

+0

據我瞭解Liquibase Code,_init()_在_reportStatus()_期間未被調用。運行_update_命令後,將添加兩列。但隨着Liquibase的舊版本,我現在得到校驗和錯誤。 – Eric

相關問題