将Grails从3.3.2升级到3.3.9时遇到问题:由于H2升级,启动时出现异常“无法创建池的初始连接”

时间:2019-01-03 08:52:04

标签: grails h2

从GRAILS 3.3.2升级到3.3.9后,启动时出现以下错误:

  

org.apache.tomcat.jdbc.pool.ConnectionPool:无法创建池的初始连接。
  org.h2.jdbc.JdbcSQLException:Scale($“ 10”)不得大于precision({1});

({1}); SQL statement:
CREATE CACHED TABLE PUBLIC.GAME(
ID BIGINT DEFAULT (NEXT VALUE FOR PUBLIC.SYSTEM_SEQUENCE_6AFE1F30_C0FB_47AD_B2B5_FD6A519957AE) NOT NULL NULL_TO_DEFAULT SEQUENCE PUBLIC.SYSTEM_SEQUENCE_6AFE1F30_C0FB_47AD_B2B5_FD6A519957AE SELECTIVITY 100,
VERSION BIGINT NOT NULL SELECTIVITY 3,        
...
FINALROI DOUBLE SELECTIVITY 76,
STATUS VARCHAR DEFAULT 'FINISHED' NOT NULL SELECTIVITY 1
) [90051-197]

仅当使用现有的H2数据库(包含大量数据)时,才会出现此问题。我测试了设置** dbCreate:create **,然后一切正常。我还对创建的模式进行了比较,它与我的实际数据库中的模式相同。

我还测试了GRAILS 3.3.5是否发生了中断。我浏览了发行版的内容,发现什么都不会导致这种行为。

有人能指出我正确的方向吗?我的数据库中的数据是否有问题(以某种方式发生了无效的插入)或这是由其他原因引起的。

编辑

与H2升级到1.4.197版本有关。通过在build.gradle

中设置以前的版本来进行降级是一种简单的解决方法
runtime "com.h2database:h2:1.4.196"             

1 个答案:

答案 0 :(得分:0)

问题出在错误的sql上,由于早期H2版本中的错误,未正确验证。由于某种原因,该架构包含一条语句,其中scale > precision

_TIME TIMESTAMP(23, 10)

通过数据库转换修复了该问题。