- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 play framework 2.2.2 scala 应用程序并使用 play-flyway 1.0.3。
以下迁移应该由 flyway 运行:
ALTER TABLE `user_visits` ADD `FirstSiteRequestTime` DATETIME NOT NULL ;
UPDATE `user_visits` SET `FirstSiteRequestTime`=(SELECT `Time` FROM `user_siterequests` WHERE `user_siterequests`.`Visit`=`user_visits`.`ID` ORDER BY `Time` ASC LIMIT 1) ;
所以我向表中添加了一列,然后使用更新语句以编程方式填充它。
第一行执行正常,但更新状态失败
FlywaySqlScriptException: Error executing statement at line 2: UPDATE `user_visits` SET `FirstSiteRequestTime`=(SELECT `Time` FROM `user_siterequests` WHERE `user_siterequests`.`Visit`=`user_visits`.`ID` ORDER BY `Time` ASC LIMIT 1)
com.googlecode.flyway.core.command.FlywaySqlScriptException: Error executing statement at line 2: UPDATE `user_visits` SET `FirstSiteRequestTime`=(SELECT `Time` FROM `user_siterequests` WHERE `user_siterequests`.`Visit`=`user_visits`.`ID` ORDER BY `Time` ASC LIMIT 1)
com.googlecode.flyway.core.dbsupport.SqlScript.execute(SqlScript.java:92)
com.googlecode.flyway.core.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:72)
com.googlecode.flyway.core.command.DbMigrate$2.doInTransaction(DbMigrate.java:243)
com.googlecode.flyway.core.command.DbMigrate$2.doInTransaction(DbMigrate.java:241)
com.googlecode.flyway.core.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72)
但是,当我获取迁移 SQL 代码并使用 phpmyadmin 运行它时,它工作正常(虽然运行需要 2-5 秒,但表非常大)。
我的 mysql.log 看起来像
128 Query SET autocommit=0
128 Query ALTER TABLE `user_visits` ADD `FirstSiteRequestTime` DATETIME NOT NULL
140412 4:40:43 128 Query UPDATE `user_visits` SET `FirstSiteRequestTime`=(SELECT `Time` FROM `user_siterequests` WHERE `user_siterequests`.`Visit`=`user_visits`.`ID` ORDER BY `Time` ASC LIMIT 1)
140412 4:40:44 128 Query rollback
128 Query SET autocommit=1
flyway 是否有某种超时?日志文件显示它将查询发送到 mysql 服务器,但随后回滚。为什么?如前所述,查询是正确的。当我手动运行它时它会起作用。
编辑:
运行迁移后,执行并提交了 ALTER TABLE 语句(表已更改),尽管 mysql.log 说它已回滚。第二条命令真的回滚了。
我还尝试在两个迁移中拆分两个 SQL 命令。然后第一个 (ALTER TABLE) 运行正常,第二个失败。
edit2:
这可能是某种超时问题。让它执行得更快(通过只更新一些行)
ALTER TABLE `user_visits` ADD `FirstSiteRequestTime` DATETIME NOT NULL ;
UPDATE `user_visits` SET `FirstSiteRequestTime`=(SELECT `Time` FROM `user_siterequests` WHERE `user_siterequests`.`Visit`=`user_visits`.`ID` ORDER BY `Time` ASC LIMIT 1) WHERE user_visits.id<1000;
正确运行,也在 flyway 中。
最佳答案
MySQL documentation表示从 MySQL 5.5.3 开始,在执行前导致隐式提交的“大多数语句”在执行后也会这样做。这似乎包括 ALTER TABLE
语句(在 MySQL 5.5.3 及更高版本中)。
请注意,在问题中显示的日志中,autocommit
已禁用。可以肯定的是,要么在语句之间使用显式 COMMIT
,如下所示:
ALTER TABLE `user_visits` ADD `FirstSiteRequestTime` DATETIME NOT NULL ;
COMMIT ;
UPDATE `user_visits` SET `FirstSiteRequestTime`=(SELECT `Time` FROM `user_siterequests` WHERE `user_siterequests`.`Visit`=`user_visits`.`ID` ORDER BY `Time` ASC LIMIT 1) ;
或者将它们放在单独且连续的迁移文件中,如下所示:
文件 V1__alter_table.sql:
ALTER TABLE `user_visits` ADD `FirstSiteRequestTime` DATETIME NOT NULL ;
文件 V2__update_table.sql:
UPDATE `user_visits` SET `FirstSiteRequestTime`=(SELECT `Time` FROM `user_siterequests` WHERE `user_siterequests`.`Visit`=`user_visits`.`ID` ORDER BY `Time` ASC LIMIT 1) ;
关于mysql - FlywayDB : Migration fails with "Error executing statement", 但手动运行迁移 SQL 代码有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23025532/
我们曾尝试在单个数据库中迁移一些 SQL 版本,并且进展顺利。何时尝试通过传递多个配置文件同时实现多个数据库的迁移失败。 问题是当在“-configFiles”参数中传递多个配置文件时,它只需要最后一
在这种情况下,我想忽略 Flyway 正在寻找迁移文件的特定文件夹。 示例 /db/迁移 2.0-newBase.sql /旧脚本 1.1-base.sql 1.2-foo.sql 我想忽略“oldS
我在使用 FLyway 中的类路径设置位置时遇到问题,当我使用文件系统时,它可以正常工作。 例子: 这个工作:this.setLocations("filesystem:C:\\Projects\\P
我有这个由 FlywayDB 获取的启动脚本: CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- clean up DROP table IF EXISTS
我想开始使用 Flyway 来保持不同的数据库环境同步。 我遇到的问题是,我们无法在测试和开发上使用 Prod 转储来对齐所有环境,因为我们的 Prod 环境包含测试人员和开发人员无法访问的敏感数据。
在 Flyway Db 中,有一个名为“clean”的命令,如果我们使用它,它将删除架构中的所有对象。 删除配置的架构中的所有对象(表、 View 、过程、触发器等)。 架构按照 schemas 属性
我目前有一个使用 Microsoft SQL Server 后端的 Java 网络应用程序。数据库迁移目前由 sqlcmd 手动完成,它使用 :r 命令来引用我们存储过程和 View 的脚本文件。 这
有没有办法告诉 flyway 从特定版本迁移文件并转发并排除之前的文件?例如,我可能有 v1、v2、v3、v4 和 v5,而我的数据库当前是 v2。由于某些原因,我只想应用 v4 和 v5 迁移。这可
这是我的结构,不同的团队正在处理代码库,他们正在检查数据库存储库中的 SQL 文件,其中我们有发布明智的文件夹,文件命名约定是 JIRATicket_Title_DML 或 DDL.sql 然后我们维
我想 JUnit 我的迁移。我正在使用 jdbc:h2:mem:./test 作为 url 在内存中设置一个 H2 数据库。 Flyway 正常连接到数据库但无法执行 sql 脚本给我以下信息 com
我正在使用 bazel 运行 java8 项目。除了 flywaydb 5.1.4 版,我得到以下信息。我明白错误的意思,但我不想使用 java 9。我想坚持使用 java8。这是否意味着我需要降级
我正在研究概念验证,以使用 flyway 的命令行工具从中央服务器部署到多个数据库平台。 (MySQL、Postgres 和 SQL Server) 我能够在没有 SSL 的情况下成功部署,但是它使用
当尝试使用mvn spring-boot:run启动Spring Boot应用程序时,出现以下错误: Caused by: java.lang.ClassNotFoundException: org.
我有一个 Spring Boot 项目,其中 Flyway 与 JPA 一起使用。 org.flywaydb flyway-core 该项目运行得非常好。由于一些要求,我不得不更改 Fly
flyway.password=pwd2 #does not take effect flyway.user=user2 #does not take effect spring.datasource
我有一个 play framework 2.2.2 scala 应用程序并使用 play-flyway 1.0.3。 以下迁移应该由 flyway 运行: ALTER TABLE `user_vis
我试图找到以下问题的解决方案,但没有一个对我有用。我正在使用 MySQL + flyway 开发 Angular + Spring Boot 应用程序。请指导这里出了什么问题。 org.springf
当我运行gradle clean build时,出现生成错误消息: FAILURE: Build failed with an exception. * Where: Build file 'C:\U
我编写了一个java类,它使用从taskdef操作类路径加载的依赖jar Flyway-core-4.0.3.jar并调用flyway jar中的方法,以下是导致以下问题的代码部分:问题 pub
我有一个带有 gradle 和使用 postgres db 的 Spring Boot 项目。我想通过使用 flyway 进行数据库迁移来进行测试。我面临以下错误。我的 build.gradle 和
我是一名优秀的程序员,十分优秀!