2015-02-23 5 views
1

Для создания инструкции вставки из моих баз данных (Oracle, DB2) я использовал LiquiBase команды generateChangeLog с аргументомLiquiBase generateChangeLog команда - генерации изменений с операторами вставки

--diffTypes = "данные"

Эта команда генерирует правильный xml с инструкциями вставки, однако это не известно о внешних ограничениях, поэтому я не могу снова использовать этот файл для заполнения моих баз данных. Аналогичные проблемы были описаны здесь: Is there a way to generate Liquibase data in the right order?. Предлагаемый обходной путь к сожалению невозможен для моих баз данных, потому что нет никакой команды для переключения проверок ограничений.

Мой вопрос в том, существует ли какое-либо другое решение этой проблемы? Почему я могу генерировать инструкции вставки данных в журнал изменений, но не могу использовать его из-за ограничений внешнего ключа?

+0

Его догадка, но я думаю, что это просто не реализовано в LiquiBase. Может быть слишком сложно прочитать все RI, а затем установить правильный порядок, чтобы RI был удовлетворен. Вы можете заказать его сами. Основная идея Liquibase заключается в настройке структуры базы данных. Команды 'generateChangeLog' помогут вам, но Liquibase не предназначен для загрузки и выгрузки содержимого вашей базы данных на регулярной основе. (Если Натан не докажет, что мое предположение ошибочно). – Jens

ответ

0

Jens находится прямо в комментарии. Liquibase не имеет возможности определять зависимости, потому что основным вариантом использования является отслеживание смененных наборов изменений. GenerateChangeLog - полезная возможность, но она не предназначена для обработки всех случаев, а управление зависимостями - сложная задача, которая определенно выходит за рамки.

Моя нормальная рекомендация заключается в том, что вывод generateChangeLog следует считать полезным первым шагом для работы с changeLog, и если у вас есть проблемы с зависимостями, просто измените порядок изменений наборы перед их выполнением. Если их много, вы можете написать сценарий, чтобы переупорядочить их на основе ваших знаний о ваших зависимостях.

+0

да, это именно то, что я сделал. Я переупорядочиваю его вручную - я просто делю свой файл generateChangeLog в трех XML-файлах. Один из них - чистый DDL, второй DML и последний - DDL с внешними ограничениями. Я организовал этот основной файл изменений, таким образом, что это первый DDL, второй DML и третий DDL с внешними ограничениями. Поэтому, когда я добавляю данные в DML, ограничений нет, которые добавляются в третий файл. Это мой обходной путь из-за отсутствия команды отключения проверки ограничений в моем db. –

0

Если вы можете экспортировать данные схемы +, хорошим решением является отдельный DDL, DML и эта часть DDL, которые создают ограничения. Вы должны изменить порядок те, в следующем порядке:

  1. DDL (без ограничений)
  2. DML (данные)
  3. DDL (ограничения сняты с шага 1)

Это требует немного бит ручного редактирования, но вам придется сделать это один раз для своего проекта.

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

0

Отличный вариант для работы с тюремщиками. Он генерирует журнал изменений в топологическом порядке.

http://jailer.sourceforge.net/

Смежные вопросы