在运行liquibase(3.6.3)并使用generateChangeLog命令(从命令行)时,我可以成功获取数据库中一个模式的更改日志,而不能成功获取另一模式的更改日志。
这是我所做的:
./liquibase-3.6.3/liquibase \
--driver=$DRIVER \
--classpath=$CLASSPATH \
--changeLogFile=$OUTFILE \
--url=$URL \
--username=$USERNAME \
--password=$PASSWORD \
--logLevel=debug \
--defaultSchemaName=${SCHEMA} \
generateChangeLog >$LOGFILE 2>&1
所有环境变量均已正确设置。我可以很好地连接到数据库,它适用于SCHEMA_A,但不适用于SCHEMA_B。错误输出如下:
Starting Liquibase at Fri, 17 May 2019 13:27:00 EDT (version 3.6.3 built at 2019-01-29 11:34:48)
Unexpected error running Liquibase:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
liquibase.exception.LiquibaseException:
liquibase.command.CommandExecutionException:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at
liquibase.integration.commandline.CommandLineUtils.doGenerateChangeLog(CommandLineUtils.java:279)
at liquibase.integration.commandline.Main.doMigration(Main.java:1058)
at liquibase.integration.commandline.Main.run(Main.java:199)
at liquibase.integration.commandline.Main.main(Main.java:137)
Caused by: liquibase.command.CommandExecutionException: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at liquibase.command.AbstractCommand.execute(AbstractCommand.java:24)
at liquibase.integration.commandline.CommandLineUtils.doGenerateChangeLog(CommandLineUtils.java:277)
... 3 common frames omitted
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.charAt(String.java:658)
[snip]
如您所见,我正在使用--logLevel = debug来运行它,并且没有记录正在运行的任何SQL。此外,如果使用以下命令运行它:
--diffTypes="tables"
我将在变更日志中获取表列表。但是,如果我使用以下命令运行它:
--diffTypes="tables,columns"
我收到与上述“超出范围的字符串索引”相同的错误。
该如何进一步调试以确定问题所在?