Использование существующих данных с Liquibase? - PullRequest
2 голосов
/ 28 марта 2012

При использовании Liquibase, есть ли способ использовать существующие данные для генерации некоторых данных, которые нужно вставить?

Например, скажем, я хочу обновить строку с идентификатором 5, ноЯ не знаю заранее, что идентификатор будет 5, так как это связано с другой таблицей, откуда я на самом деле буду получать идентификатор.Могу ли я сказать Liquibase, чтобы он получил идентификатор из запроса SELECT?

Полагаю, это нереально, так как я чувствую, что Liquibase действительно разработан для очень структурированного нединамического подхода., но спрашивать не больно.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 04 апреля 2012

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

Например:

<changeSet>
  <sql>insert into person (name, manager_id) values ('Fred', (select id from person where name='Ted'))</sql>
</changeSet>

Примечание: SQL (и поддержка insert + select) зависит от поставщика базы данных.

2 голосов
/ 29 марта 2012

Можно написать свой собственный пользовательский класс рефакторинга для генерации SQL. Функциональность предназначена для поддержки генерации статического SQL на основе параметров набора изменений.

Итак ... возможно получить соединение с базой данных, но предупреждение о работоспособности, связанное с этим подходом, заключается в том, что сгенерированный SQL является динамическим (ваши данные могут измениться) и тесно связан с экземпляром вашей базы данных.

Примером проблем, которые это может вызвать, является неспособность сгенерировать сценарий обновления SQL для DBA для работы с производственной базой данных.

Я долго думал об этом сценарии использования. Я до сих пор не знаю, является ли liquibase лучшим решением для этой проблемы управления данными или нужно ли его комбинировать с дополнительным инструментом, таким как dbunit .

...