【问题标题】:How to execute liquibase with java.lang.NumberFormatException on PostgreSQL如何在 PostgreSQL 上使用 java.lang.NumberFormatException 执行 liquibase
【发布时间】:2015-08-11 20:03:51
【问题描述】:

尝试在 PostgreSQL 9.3 数据库(来自 PowerShell 脚本)上的 liquibase 3.3.3 中执行 diffChangelog:

$_cmd='C:\liquibase-3.3.3-bin\liquibase 
--driver=org.postgresql.Driver 
--url=jdbc:postgresql://localhost:5432/chaos 
--username=postgres --password=Password  
  diffChangelog
--referenceUrl=jdbc:postgresql://xxx.xxx.xxx.xxx:5432/chaos
--referenceUsername=postgres --referencePassword=Password > db-changelog.xml';

CMD.EXE /c "`"$_cmd`""

我得到错误:

*CMD.EXE : Unexpected error running Liquibase: 
liquibase.exception.DatabaseException: java.lang.NumberFormatException: 
For input string: "B'00000000'::"bit""*

我正在使用 Java 版本 8 更新 45。(最新版本)。

postgresql-9.4-1201.jdbc4.jar 位于 C:\liquibase-3.3.3-bin\lib\ 目录下。

PostgreSQL 版本是 9.3。

有人知道如何修复此错误或使其正常工作吗?

提前非常感谢!

【问题讨论】:

  • 如果你 write-host $_cmd 并将结果复制粘贴到 cmd 提示符中,它可以工作吗?
  • 您能否添加完整的堆栈跟踪以查看这是 Liquibase 问题还是驱动程序问题?
  • @vonPryz(不知道如何粘贴到 cmd 提示符) write-host 的应对输出给出:与 DatabaseException 的错误完全相同:java.lang.NumberFormatException: ... 没有区别。想法? :-(
  • @a_horse_with_no_name 什么堆栈跟踪? (我对这一切都很陌生)。对我来说没有明显的堆栈跟踪。 (我是新手)。谢谢。
  • 如果可以,请尝试使用 Java 7 VM。我认为 Liquibase 和 Java 8 存在一些问题。

标签: java postgresql powershell liquibase


【解决方案1】:

感谢 a_horse_with_no_name 和 Radek Postolowicz previous question 为我指明了正确的方向。

问题出现在将列 qstatus 定义为的 PostgreSQL 表中:

qstatus bit(8) DEFAULT B'00000000'::"bit"       <--**HERE IS THE PROBLEM!

PostgreSQL bytea 数据类型被各方正确解释

删除此列解决了所有问题。

进一步的测试(对我而言)表明,任何使用强制转换定义的列都以某种方式因 liquibase 而失败:

例如,

qstatus bit(8) DEFAULT B'00000000'::"bit"

cmi character varying(1) DEFAULT ' '::bpchar

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2021-07-26
    • 2017-10-28
    • 2015-10-13
    • 1970-01-01
    • 2022-08-04
    相关资源
    最近更新 更多