我正在尝试将Liquibase diffChangeLog与Informix一起使用,并且在具有保留字“max”作为列名的表上失败。我试着用:
--excludeObjects="table:informix.edidef_element"
但从原始数据库获取基础数据时似乎并不值得尊敬。 (注意:我还发现--excludeObjects参数仅在命令的diffChangeLog部分之后才能工作/识别。)
我得到的错误是:
DEBUG 1/22/15 3:05 PM:liquibase:使用SQL检查edidef_element.edi是否自动增加:'从informix.edidef_element中选择最大值,其中0 = 1' 运行Liquibase时出现意外错误:liquibase.exception.DatabaseException:java.sql.SQLException:发生语法错误。
如果我将select命令剪切并粘贴到dbaccess中,我会得到同样的错误。现在我只想跳过那个表,直到我有机会修复列名。
这是我的命令脚本:
#!/bin/sh
database="edi"
exclude="table:edidat_location,table:informix.edidef_element,column:max,(i?)edidef_element"
./liquibase --logLevel=debug --defaultSchemaName="informix" --diffTypes="tables,columns" \
--driver=com.informix.jdbc.IfxDriver \
--url="jdbc:informix-sqli://stmst3.test.trnswrks.com:56670:informixserver=stmst3;database=${database}" --username=khhis --password="hidden" \
diffChangeLog \
--excludeObjects=${exclude} \
--referenceDefaultSchemaName="informix" \
--referenceUrl="jdbc:informix-sqli://stmsq3.qa.trnswrks.com:56070:informixserver=stmsq3;database=${database}" --referenceUsername=khhis --referencePassword="hidden"
如果我不能让Liquibase跳过表,有没有办法强制生成的选择包含表名?如果选择的形式是“从informix.edidef_element中选择edidef_element.max,其中0 = 1”,那么它将起作用。
我使用的是版本3.3.2
./liquibase --version
Liquibase版本:3.3.2