【问题标题】:Flyway: Can't insert the value NULL in 'installed_on', table 'schema_version' column does not allow nulls. INSERT failsFlyway:无法在“installed_on”中插入值 NULL,表“schema_version”列不允许空值。插入失败
【发布时间】:2019-06-12 21:18:07
【问题描述】:

使用 Flyway-core:4.1.2 进行数据库迁移。
添加了一个新的 DDL 文件供 flyway 执行。 Flyway 正确执行 DDL 并对表和列进行相应的更改。 (我们正在添加一个表并更改新 DDL 中以前的一些列)。
但是,flyway 未能将此尝试注册到 schema_version 表:我收到以下错误:

架构 [dbo] 的当前版本:2.1
无法在元数据表 [dbo].[schema_version] 中插入版本“3.0”的行

上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.BeanCreationException: 在类路径资源 [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class] 中创建名称为“flywayInitializer”的 bean 时出错:调用 init 方法失败;嵌套异常是 org.flywaydb.core.internal.dbsupport.FlywaySqlException:

消息:无法将值 NULL 插入列“installed_on”、表“dbo.schema_version”;列不允许空值。插入失败。

Flyway 成功执行了 DDL,但是由于 installed_on 上的 NULL 而无法将其记录到 schema_version 表中。任何帮助将不胜感激。提前致谢。 !

【问题讨论】:

  • 你找到解决这个@ASCIIbetical 的方法了吗?
  • 事实上我确实做到了。感谢您入住。
  • 感谢分享您的修复,非常感谢。
  • 是的,如果能真正分享修复将不胜感激...

标签: sql schema h2 database-migration flyway


【解决方案1】:

在我的情况下,错误是数据库表 flyway_schema_history 的列 installed_on 定义为 DATETIME NOT NULL,而它应该是 DATETIME DEFAULT GETDATE() NOT NULL

当我手动更改列以包含默认值定义时,问题已解决。

我的公司有许多在过去 3 年中创建的数据库,我注意到其中最老的和最年轻的都正确设置了列,而大约 1.5 年的数据库定义了列没有默认值。也许这是某些旧版本 Flyway 中的错误?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多