我正在使用可重复的飞行路线迁移来进行一些数据修改,在这种情况下应该多次运行。我在迁移.sql代码的注释中放置了一个占位符值,如$ {TRIGGER_DATA_UPDATE}。我们的想法是从flyway.conf(或改变flyway.conf的bash脚本)中更改此占位符值,并使可重复的迁移运行。
据我所知,更改占位符不会导致可重复的迁移再次运行。它只会运行一次。看起来校验和计算没有考虑占位符值。
这是一个功能还是一个错误?
相反,如果我在可重复迁移中直接编辑注释,则会检测到更改,并且迁移将在下一次调用flyway时运行。
这是可重复的迁移.sql文件:
-- The following line will trigger execution of this script appropriately when upgrade.shis executed
/* ${TRIGGER_DATA_UPDATE} */
UPDATE restcomm_accounts SET password = auth_token, password_algorithm = 'md5' WHERE password IS NULL;
TRIGGER_DATA_UPDATE是占位符值。
这是flyway.conf的重要部分:
flyway.placeholders.TRIGGER_DATA_UPDATE=this_part_changes
答案 0 :(得分:0)
你是对的,校验和计算是在文件内容上(仅限)。这似乎是设计上的; to Husky UI/JVM
作为一种解决方法,您可以将其放入SqlMigrationResolver.java并让它有条件地运行。我假设你在命令行(正如你提到的bash)所以它将被放入afterMigrate.sql
。您需要使用数据库的编程语言(例如PLSQL)或使用where语句创造性。确保打开debug(-X
)以便记录回调。即使迁移没有实际运行任何迁移(即没有待处理的),它也会被执行。
尝试以下方法:
-- The following line will trigger execution of this script appropriately when upgrade.shis executed
UPDATE restcomm_accounts SET password = auth_token, password_algorithm = 'md5' WHERE password IS NULL
AND '${TRIGGER_DATA_UPDATE}' = 'Y'
;