首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FlywaySqlException:无法在架构历史表`schema_version`中插入版本‘11’的行:字段`version_rank`没有默认值

FlywaySqlException:无法在架构历史表`schema_version`中插入版本‘11’的行:字段`version_rank`没有默认值
EN

Stack Overflow用户
提问于 2018-10-02 00:21:38
回答 2查看 3.5K关注 0票数 3

在使用新迁移运行Spring应用程序时,我得到了这个错误。到目前为止,它已经成功地进行了10次迁移。该字段实际上没有默认值。不应该需要默认设置,因为Flyway应该在该字段中插入值11。

代码语言:javascript
复制
Caused by: org.flywaydb.core.internal.exception.FlywaySqlException:
Unable to insert row for version '11' in Schema History table `app`.`schema_version`
--------------------------------------------------------------------------------------------
SQL State  : HY000
Error Code : 1364
Message    : Field 'version_rank' doesn't have a default value

    at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory.doAddAppliedMigration(JdbcTableSchemaHistory.java:174) ~[flyway-core-5.1.4.jar:na]
    at org.flywaydb.core.internal.schemahistory.SchemaHistory.addAppliedMigration(SchemaHistory.java:170) ~[flyway-core-5.1.4.jar:na]
    at org.flywaydb.core.internal.command.DbMigrate.applyMigrations(DbMigrate.java:299) ~[flyway-core-5.1.4.jar:na]
    at org.flywaydb.core.internal.command.DbMigrate.migrateGroup(DbMigrate.java:244) ~[flyway-core-5.1.4.jar:na]
    at org.flywaydb.core.internal.command.DbMigrate.access$100(DbMigrate.java:53) ~[flyway-core-5.1.4.jar:na]
    at org.flywaydb.core.internal.command.DbMigrate$2.call(DbMigrate.java:163) ~[flyway-core-5.1.4.jar:na]
    at org.flywaydb.core.internal.command.DbMigrate$2.call(DbMigrate.java:160) ~[flyway-core-5.1.4.jar:na]
    at org.flywaydb.core.internal.database.mysql.MySQLNamedLockTemplate.execute(MySQLNamedLockTemplate.java:60) ~[flyway-core-5.1.4.jar:na]
    at org.flywaydb.core.internal.database.mysql.MySQLConnection.lock(MySQLConnection.java:80) ~[flyway-core-5.1.4.jar:na]
    at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory.lock(JdbcTableSchemaHistory.java:150) ~[flyway-core-5.1.4.jar:na]

pom.xml

代码语言:javascript
复制
<dependency>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-core</artifactId>
  <version>5.1.4</version><!--$NO-MVN-MAN-VER$-->
</dependency>

application.properties

代码语言:javascript
复制
# Prevent complaints when starting migrations with existing tables.
flyway.baselineOnMigrate = true
flyway.table=schema_version

schema_version

代码语言:javascript
复制
| Field          | Type          | Null | Key | Default           | Extra |
+----------------+---------------+------+-----+-------------------+-------+
| version_rank   | int(11)       | NO   | MUL | NULL              |       |
| installed_rank | int(11)       | NO   | MUL | NULL              |       |
| version        | varchar(50)   | NO   | PRI | NULL              |       |
| description    | varchar(200)  | NO   |     | NULL              |       |
| type           | varchar(20)   | NO   |     | NULL              |       |
| script         | varchar(1000) | NO   |     | NULL              |       |
| checksum       | int(11)       | YES  |     | NULL              |       |
| installed_by   | varchar(100)  | NO   |     | NULL              |       |
| installed_on   | timestamp     | NO   |     | CURRENT_TIMESTAMP |       |
| execution_time | int(11)       | NO   |     | NULL              |       |
| success        | tinyint(1)    | NO   | MUL | NULL              |       |

如果迁移甚至不起作用,我将如何创建迁移以添加默认值?

飞道5.1.4,Spring 5.1.13,mysql 15.1远端10.1.30-MariaDB,用于CYGWIN (i686)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-02 13:51:36

看起来,如果您从Flyway 3.x直接升级到5.x,绕过4.x,就会出现这个问题。

Spring 1.5默认使用Flyway 3.x,而SpringBoot2.x使用Flyway 5.x。

来自5.0.0行车线发布须知

对于用户从Flyway 3.x升级的重要注意事项:此版本不再支持从Flyway 3.x升级架构历史表。您必须先升级到Flyway 4.2.0,然后再升级到Flyway 5.0.0

来自弹簧引导2迁移指南

升级到Spring 2将使天桥从3.x升级到5.x。为了确保模式升级顺利进行,请遵循以下说明:

  • 首先,将1.5.x Spring应用程序升级到Flyway 4(撰写本文时为4.2.0),参见Maven和Gradle的说明。
  • 模式升级到Flyway 4之后,升级到Spring 2,然后再次运行迁移,将应用程序移植到Flyway 5。

迁移指南还通过另一种方法链接到博客文章

有人提出了关于弹簧启动跳过天桥4.x的问题,还有一个反对秩异常的问题。

看来其他很多人也遇到了同样的问题。

票数 5
EN

Stack Overflow用户

发布于 2018-10-02 03:32:05

不得不

  • 通过将默认值写入已运行但不保存的迁移顶部,手动向字段添加默认值。 alter schema_version alter列version_rank设置默认为0;
  • 注释迁移中的其他行,因为它们已经运行。 -更改表myTable添加列createdAt日期;
  • 再次迁移以将行添加到schema_version mvn天桥:-Dflyway.user=user -Dflyway.password= -Dflyway.url=jdbc:mysql://localhost:3306/app -Dflyway.table=schema_version
  • 取消注释迁移中的行,以便将它们应用到管道中。
  • 验证 mvn天桥:验证-Dflyway.user=user -Dflyway.password= -Dflyway.url=jdbc:mysql://localhost:3306/app -Dflyway.table=schema_version ERROR ->应用于数据库: 1445435712错误->在本地解析:-1275756780
  • 手动将校验和复制到schema_version表中,这样它就不会再在开发中抱怨了 更新schema_version集校验和= -1275756780,其中版本= 11;

希望它只在阶段和生产中起作用。

也许FlyWay应该使用Rails迁移来管理自己的模式?

我知道DB版本控制是一个很难解决的问题,FlyWay应该使它更容易,但有时感觉它比仅仅使用自定义的SQL脚本或手动部署检查表要做的更多。我找不到任何提到这个问题的地方,我最后一次移民是在7月底左右。也许现在每个人都已经停止使用它了?我从5月份就开始使用它了,并且遇到了很多问题(表名更改,校验和计算更改,现在是这个)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52600527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档