2015-06-30 32 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

相关问题