Подтвердить что ты не робот

Может ли Flyway или Liquibase генерировать обновление script вместо обновления базы данных напрямую?

Во-первых, немного фона. У меня есть набор приложений Java, некоторые из них основаны на JPA, а некоторые нет. Чтобы создать мои базы данных, я в настоящее время использую экспорт схемы Hibernates для создания сценариев создания для тех, кто использует JPA. Те, кто не использует JPA, я генерирую скрипты вручную. Затем они запускаются во время установки приложения с помощью ANT. Для обновлений программа установки приложений просто применяет сценарии обновления к базе данных.

Чтобы улучшить управление обновлениями баз данных, я смотрел Flyway и Liquibase. Кажется, что я почти делаю то, что хочу, (в сторону: я предпочитаю Flyway на данный момент из-за всех существующих SQL/DDL-скриптов). Проблема, которую я вижу, заключается в том, что они одновременно обновляют базу данных. Это нормально для многих установок, но не для всех.

Что мне нужно сделать, так это запустить Flyway/Liquibase против базы данных и создать обновление script, которое включает в себя все обновления, необходимые для обновления базы данных - включая любые изменения, которые Flyway/Liquibase необходимо сделать самостоятельно столы. Это позволило бы мне (или, что еще важнее, администратору базы данных) запустить обновление script вне приложения (ов) для обновления базы данных. Затем я мог использовать Flyway/Liquibase в своем приложении, чтобы убедиться, что база данных обновлена.

Можно ли это сделать с помощью Flyway или Liquibase или любого другого инструмента?

4b9b3361

Ответ 1

Liquibase справляется с этим довольно хорошо. Он просматривает вашу базу данных в текущем состоянии, находит непримененные изменения и генерирует команду SQL script с update в режиме sql output.

Использование надлежащего инструмента миграции базы данных вместо генератора Hibernate - это способ пойти в любом случае, рано или поздно вы столкнетесь с ситуацией, которую Hibernate не поддерживает. Для нас он сбросил уникальный индекс и заменил его другим. Вы также можете включить hibernate.hbm2ddl.auto=validate, чтобы чувствовать себя в безопасности относительно совместимости между структурой базы данных и объектом beans.

Ответ 2

Что вам нужно, это инструмент сравнения схем. Я помню, что у TOAD был довольно мощный. Hibernate также попытается сгенерировать сценарии обновления схемы на основе обнаруженных им объектов и метаданных базы данных.

Однако вам нужно..., чтобы не делать этого и вместо этого использовать Flyway, чтобы все изменения в базе данных. То есть вам следует включить автоматические обновления схем Hibernates и самостоятельно написать обновления схемы. Каждый раз, когда вы хотите внести изменения в базу данных, вам нужно написать обновление схемы.

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

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

Ответ 3

У нас была аналогичная проблема, когда я работал консультантом (Intelliware), поэтому разработчики собрали некоторый код и подтолкнули его к GitHub.

Мы безуспешно пытались включить его в основной репозиторий Flyway.

https://github.com/Intelliware/flyway-script-generator

Ответ 4

Да, создание SQL script является встроенной функцией для Liquibase. Другая область, в которой Liquibase имеет преимущество перед пролетным мостом, - это возможность миграции изменений кода базы данных (пакетов, процедур и функций). Я использую пролет, но мне бы хотелось, чтобы эти функции Liquibase были доступны на пролете.