mysql - FlywaySqlException:无法在模式历史记录表“schema_version”中插入版本“11”的行:字段“version_rank”没有默认值
问题描述
使用新迁移运行我的 Spring Boot 应用程序时出现此错误。到目前为止,它已经进行了 10 次迁移。该字段确实没有默认值。不需要默认值,因为 Flyway 应该在该字段中插入值 11。
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
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.1.4</version><!--$NO-MVN-MAN-VER$-->
</dependency>
application.properties
# Prevent complaints when starting migrations with existing tables.
flyway.baselineOnMigrate = true
flyway.table=schema_version
schema_version
| 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 | |
如果迁移甚至不起作用,我将如何创建迁移以添加默认值?
Flyway 5.1.4,Spring Boot 5.1.13,mysql Ver 15.1 Distrib 10.1.30-MariaDB,用于 CYGWIN (i686)
解决方案
如果您绕过 4.x 从 Flyway 3.x 直接升级到 5.x,似乎会出现此问题。
Spring Boot 1.5 默认使用 Flyway 3.x,而 Spring Boot 2.x 使用 Flyway 5.x。
从 Flyway 3.x 升级的用户的重要说明:此版本不再支持从 Flyway 3.x 升级模式历史表。在升级到 Flyway 5.0.0 之前,您必须先升级到 Flyway 4.2.0。
升级到 Spring Boot 2 会将 Flyway 从 3.x 升级到 5.x。为确保架构升级顺利进行,请按照以下说明进行操作:
首先将您的 1.5.x Spring Boot 应用程序升级到 Flyway 4(撰写本文时为 4.2.0),请参阅 Maven 和 Gradle 的说明。
将架构升级到 Flyway 4 后,升级到 Spring Boot 2 并再次运行迁移以将应用程序移植到 Flyway 5。
迁移指南还链接到具有替代方法的博客文章。
关于Spring Boot 跳过 Flyway 4.x和一个针对Flyway 的问题引发了您遇到的 version_rank 异常。
看起来很多其他人也遇到了同样的问题。
推荐阅读
- javascript - NextJS - 在一页上进行多次获取的动态路由
- javascript - 无法使用 json 文件运行 Brain.js
- python - Scipy Voronoi 3D 几何返回每个边界面
- gnu-make - 如何将 clearmake 默认设置为 GNU 兼容模式?
- c++ - Visual Studio 找不到
功能 - asp.net - JWT 声明不在 HttpContext.User.Claims 中
- forms - (Vue) Ant Design 使用 v-decorator 以 ant 的形式显示客户端和服务器端验证
- heroku - 将 Heroku 项目迁移到另一种编程语言
- sql - 甲骨文。在选择中使用 max() 仅获取 1 条记录
- docker - 如何在詹金斯管道中使用焦油?