Первоначально опубликовано в https://github.com/flyway/flyway/issues/2429
У меня проблема (возможно, неправильная конфигурация) с использованием заполнителей пролетных путей;Я могу использовать заполнители для своих собственных переменных;но он терпит неудачу, потому что одно значение в запросе sql имеет синтаксис, аналогичный синтаксису заполнителя flyway.
Какую версию и версию Flyway вы используете?
5.2.4 using official docker image
Если это не последняя версия, можете ли вы воспроизвести проблему и с самой последней? (Многие ошибки исправляются в более новых выпусках, и обновление часто решает проблему)
5.2.4
- это последняя версия в Docker Hub (https://hub.docker.com/r/boxfuse/flyway/)
Какой клиент вы используете? (Командная строка, Java API, плагин Maven, плагин Gradle)
Командная строка через образ докера
Какую базу данных вы используете (тип и версия)?
MySQL Server version: 5.7.26 - MySQL Community Server (GPL)
- Это наследиеproject
Какую операционную систему вы используете?
Linux CentOS 7 x64
(uname -r = 3.10.0-957.5.1.el7.x86_64
)
Что вы делалиdo?
(Пожалуйста, включите содержимое, вызывающее проблему, любые соответствующие параметры конфигурации, оператор SQL, который не выполнен (еслиvant) и команду, которую вы выполнили.)
Я применяю flyway для инициализации / обновления базы данных MySQL;Вот пара команд SQL.
Здесь я использую заполнители с префиксами xxx:
CREATE USER IF NOT EXISTS '${xxxdbuser}'@'${xxxdbclip}' IDENTIFIED WITH mysql_native_password BY '${xxxdbpass}';
GRANT ALL PRIVILEGES ON ${xxxdbbase}.* TO '${xxxdbuser}'@'${xxxdbclip}';
FLUSH PRIVILEGES;
... затем в другом скрипте SQL из стороннего приложения я вставляю содержимое с${row}
.Я не хочу, чтобы Flyway интерпретировал ${row}
как заполнитель, только мои собственные переменные, начинающиеся с ${xxx
, такие как ${xxxdbuser}
INSERT INTO `xxx_xxx` (`name`, `template`, `lang`, `group`, `version`, `data`, `size`, `style`, `modified`) VALUES
... ('addressbook.email.rows', '', '', 0, '1.3.001', 'a:1:{i:0;a:6:{ ... \"label\";s:21:\"$row_cont[type_label]\";s:4:\"name\";s:12:\"${row}[type]\";s:5:\"align\";... :{i:0;s:4:\"100%\";}}}', '100%', '', 1150326789), ...
Я предполагаю, что параметр placeholderPrefix описан в https://flywaydb.org/documentation/commandline/info или FLYWAY_PLACEHOLDER_PREFIX env var, описанный в https://flywaydb.org/documentation/envvars#FLYWAY_PLACEHOLDER_PREFIX, предназначен для этой цели;но мне не удалось их использовать!
Вот моя команда, использующая докер:
docker run --rm --network="$(docker network ls --filter name=app_mysql_dev --filter "label=type=app" --format '{{.ID}}')" \
-v `pwd`/code/Admin/install:/flyway/sql \
-e FLYWAY_URL=jdbc:mysql://${host}:${port}?useSSL=false \
-e FLYWAY_SCHEMAS=${base} \
-e FLYWAY_USER=root \
-e FLYWAY_PASSWORD=${root_pwd} \
-e FLYWAY_PLACEHOLDERS_PREFIX="\${xxx" \
-e FLYWAY_PLACEHOLDERS_XXXDBBASE=${base} \
-e FLYWAY_PLACEHOLDERS_XXXDBUSER=${user} \
-e FLYWAY_PLACEHOLDERS_XXXDBPASS=${pass} \
-e FLYWAY_PLACEHOLDERS_XXXDBCLIP=${clip} \
-e FLYWAY_PLACEHOLDERS_XXXVHOST=${vhost} \
-e FLYWAY_PLACEHOLDERS_XXXSCHEME=${scheme} \
-e FLYWAY_CONNECT_RETRIES=5 \
boxfuse/flyway:5.2.4 -locations=filesystem:/flyway/sql/custom/ \
migrate
Что вы ожидали увидеть?
Все ${xxx
заполнители должны быть заменены соответствующими значениями ENV;и ${row}
цепочка в коде SQL остается неизменной.
Что вы видели вместо этого?
Ошибка пролетного пути:
Flyway Community Edition 5.2.4 by Boxfuse
Database: jdbc:mysql://tasks.atlas-mysql:3306 (MySQL 5.7)
ERROR: No value provided for placeholder expressions: ${row}. Check your configuration!
Я полагаюЯ неправильно сконфигурировал свою команду ... любой пример помощи, совета и / или командной строки помог бы.
Regrads,
Chris