【问题标题】:Problem upgrading Grails from 3.3.2 to 3.3.9: Exeption on startup "Unable to create initial connections of pool" due to H2 upgrade将 Grails 从 3.3.2 升级到 3.3.9 时出现问题:由于 H2 升级,启动时出现“无法创建池的初始连接”异常
【发布时间】:2019-01-03 08:52:04
【问题描述】:

从 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"             

【问题讨论】:

    标签: grails h2


    【解决方案1】:

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

    _TIME TIMESTAMP(23, 10)
    

    通过数据库转换修复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-21
      • 2020-04-26
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 2023-01-12
      • 2011-06-18
      • 1970-01-01
      相关资源
      最近更新 更多