2016-12-20 3 views
2

Я использую повторяемую миграцию пролетного пути, которая выполняет некоторые манипуляции с данными, которые при обстоятельствах должны выполняться более одного раза. Я помещаю значение placeholder как $ {TRIGGER_DATA_UPDATE} в комментарий в файле .sql миграции. Идея состоит в том, чтобы изменить это значение placeholder из flyway.conf (или скрипта bash, который изменяет flyway.conf) и выполнить повторный запуск миграции.Повторяющаяся миграция пролетного пути не будет работать снова, если изменения заполнителя

Насколько я видел, изменение заполнитель не приводит к повторному запуску повторной миграции. Он будет работать только один раз. Похоже, что расчет контрольной суммы не учитывает значения заполнителя.

Является ли это признаком или ошибкой?

Наоборот, если я отредактирую комментарий непосредственно внутри повторяемой миграции, это изменение обнаружено, и миграция будет выполняться при следующем вызове пролетного пути.

Вот повторяемая миграция .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

Вы правы, вычисление контрольной суммы на содержание файлов (только). Похоже, это по дизайну; SqlMigrationResolver.java.

В качестве обходного пути вы можете разместить это в callback и выполнить его условно. Я предполагаю, что вы находитесь в командной строке (как вы упомянули 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' 
; 
Смежные вопросы