我有一个play框架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) ;
因此,我将一列添加到表中,然后使用更新语句以编程方式填充它。
第一行执行良好,但update statemens失败
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。日志看起来像
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。日志显示它已回滚。第二个命令真的被撤回了。
我还尝试在两次迁移中拆分两个SQL命令。然后第一个(ALTER TABLE)运行正常,第二个失败。
编辑2:
这可能是某种超时问题。使其执行得更快(仅通过更新某些行)
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;
正确运行,也在飞行途中。
MySQL文档指出,在MySQL 5.5.3中,“大多数语句”在执行前会导致隐式提交,而在执行后也会导致隐式提交。这似乎包括ALTER TABLE语句(在MySQL 5.5.3及更高版本中)。
请注意,在问题中显示的日志中,禁用了自动提交。当然,在如下语句之间使用显式提交:
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\uu alter\u 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) ;
我已经为工作中的应用程序创建了一个flyway项目。事实证明,在我准备好flyway设置进行测试之前,其中一个开发人员已经在测试中执行了一些SQL语句。 我的sql脚本有几个语句: 应该在语句#2上删除的列已经在我们的TEST实例上手动删除。它还没有被删除在我们的PROD实例上,我想通过迁移而不是手动进行。 显然,如果不先在测试中进行测试,我不会在PROD上运行迁移(有比这三个查询多得多的东西)。
我正在flyway的CMD中运行命令,但脚本文件的迁移会出现以下异常 [错误]无法执行目标组织。flywaydb:flyway maven插件:3.2.1:在convertopia auto db:org项目上迁移(默认cli)。flywaydb。果心应用程序编程接口。FlywayException:验证失败。迁移1.0.53的迁移描述不匹配[错误]- 我尝试过,它说构建成功,但问题仍然没有解决。
在类路径中:/db。迁移有迁移但flyway没有看到这一点,而是爱上了msg 2022-05-02 17:28:07.993INFO 45296 --- [ restartedMain]c. c. c. ConfigServiceProperty tySourceLocator:从服务器获取配置,地址为:http://localhost:8888/story2022-05-02 17:28:08.
我正在使用Android Studio 3.2 Canary 14,并试图迁移现有项目以使用AndroidX。从https://developer.android.com/topic/libraries/support-library/androidx-rn听起来,我必须设置(这是在选择“重构到AndroidX…”选项时自动完成的)。我还将目标API级别更新为28。还有人看到这个问题吗? 未能转换
This manual migration process should be run after the automated migration process, to complete the missing parts, or debug issues in the migration CLI output. Project setup package.json Scoped package
我有一个问题启动我的Java应用程序 liqibase更新出错: