当前位置: 首页 > 知识库问答 >
问题:

由于唯一索引或主键冲突,Flyway迁移失败

司徒兴思
2023-03-14

我开始在我的spring managed java项目中使用flyway(我也在使用hibernate)。

我遵循了飞行路线的文档。我还配置了maven插件,一切正常。

尝试使用maven插件进行清理、初始化和迁移,一切正常。

相反,如果我尝试运行我的应用程序(其中有我的flyway bean):

<bean id="flyway" class="org.flywaydb.core.Flyway" init-method="migrate">
    <property name="dataSource" ref="dataSource" />
</bean>

我看到了:

  • 创建数据库的模式
  • 创建schema_version表
  • 我的脚本创建整个数据库工作

不幸的是,我的应用程序无法启动,因为在迁移过程中出现了我无法理解的错误:

    31/10/2014 11:03:34  INFO DbSupportFactory:43 - Database: jdbc:h2:~/db/db (H2 1.4)
31/10/2014 11:03:34  INFO DbValidate:43 - Validated 1 migration (execution time 00:00.015s)
31/10/2014 11:03:34  INFO MetaDataTableImpl:43 - Creating Metadata table: "PUBLIC"."schema_version"
31/10/2014 11:03:34  INFO DbMigrate:43 - Current version of schema "PUBLIC": << Empty Schema >>
31/10/2014 11:03:34  INFO DbMigrate:43 - Migrating schema "PUBLIC" to version 3.0.0
31/10/2014 11:03:34 ERROR ContextLoader:331 - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flyway' defined in ServletContext resource [/WEB-INF/spring/app-jpa-config.xml]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Unable to insert row for version '3.0.0' in metadata table "PUBLIC"."schema_version"
...
...
...
Caused by: org.h2.jdbc.JdbcSQLException: Unique index or primary key violation: "PRIMARY_KEY_6 ON PUBLIC.""schema_version""(""version"") VALUES ( /* 3 */ CAST('3.0.0' AS VARCHAR_IGNORECASE) )"; SQL statement:
INSERT INTO "PUBLIC"."schema_version" ("version_rank","installed_rank","version","description","type","script","checksum","installed_by","execution_time","success") VALUES (?, ?, ?, ?, ?, ?, ?, USER(), ?, ?) [23505-182]

所以看起来是一个重复的异常,但它非常奇怪。在这之后,我看了数据库,似乎总是正确的:

  • schema_versione包含两行:flyway init 和我的脚本,版本为 3.0.0
  • 我看到整个数据库已创建

所以我的问题是:怎么了?flyway试图进行两次迁移吗?

谢谢

共有1个答案

朱慈
2023-03-14

我解决了这个问题。最后是一个愚蠢的问题:在我的sql脚本中还创建了schema_version。当然这是一个错误。

删除脚本中的这一部分一切正常!

 类似资料:
  • 我是hibernate新手,我遇到了以下问题。“唯一索引或主键冲突”。问题的出现是由于错误的映射,但我花了几个小时来找出为什么会发生这种情况。 我有一个超级类叫做数据结构 然后是关联两个元素的类关联。这里省略了类的某些部分,只是为了简化它。 这个类作为两个数据结构类型类之间的中间类。像这样。 TP-协会-TP TP等级: 或者激活类 总的来说,我增加了以下内容: 当我尝试添加相同的对象时,问题就出

  • 每当我的应用程序启动时,我总是得到以下错误消息: 将data.sql更改为: 生成以下错误消息:

  • 我遇到了一个罕见的,但令人沮丧的问题,Postgres似乎错过了我的主键冲突,并抛出一个错误的唯一索引,我没有把我的ON冲突。 例如: 表: 列: 有时这运行得很好,但有时它告诉我 我肯定我错过了什么,但我不知道是什么。我需要从集合中删除唯一列吗?为什么这不总是抛出一个错误?

  • 尝试通过REST Post方法插入Student对象时得到以下错误 2020-10-08 18:50:08.799错误21708---[nio-8080-exec-7]O.A.C.C.C.[.[.[/].[dispatcherServlet]:servlet.Service()在路径[]上下文中的servlet[dispatcherServlet]引发异常[请求处理失败;嵌套异常是org.spri

  • 尝试通过REST Post方法插入学生对象时出现以下错误 2020-10-08 18:50:08.799错误21708---[nio-8080-exec-7]o. a. c. c.C.[.[.]Servlet.service()的servlet[调度Servlet]在上下文中的路径[]抛出异常[请求处理失败;嵌套异常是org.springframework.dao.数据完整性违反异常:不能执行语句

  • java } cardto.java 唯一索引或主键冲突:由:org.h2.jdbc.jdbcsqlexception使用:唯一索引或主键冲突:“public.car(ID)上的主键”;SQL语句:插入到car(可转换,engine_type,IS_Brooking,IS_Function,license_plate,Manufactor,rating,seat_count,id)值(?,?,?,