我使用的是可重复的飞行迁移,该迁移会在情况下进行一些数据操作,该数据在情况下应多次运行。我将占位符价值放在opration .sql代码中的注释中。这个想法是从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
您是对的,校验和计算在文件内容上(仅)。这似乎是通过设计。sqlmigrationResolver.java。
作为解决方法,您可能可以将其放入回调中并有条件地运行。我假设您在命令行(如您提到的bash)上,因此将其放入afterMigrate.sql
中。您要么需要使用数据库的编程语言(例如PLSQL),要么对Where语句进行创造性。确保打开调试(-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'
;