Мы стремимся заменить различные процессы самостоятельного и ручного развертывания баз данных на Liquibase. У нас есть десятки баз данных, для которых мы хотели бы в конечном итоге использовать Liquibase. Во многих базах данных уже есть сотни объектов.
Поэкспериментировав с Liquibase в течение некоторого времени, я придумал именно это, и я хочу посмотреть, заметит ли кто-нибудь очевидные недостатки.
Поскольку в некоторых базах данных есть сотни объектов, я разбил databaseChangeLogs по типам объектов. У меня есть основной файл databaseChangeLog, который выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
<include file="migrations/_tables.xml" relativeToChangelogFile="true"/>
<include file="migrations/_triggers.xml" relativeToChangelogFile="true"/>
<include file="migrations/_views.xml" relativeToChangelogFile="true"/>
<include file="migrations/_stored_procedures.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>
Поэтому при запуске миграции она сначала вносит изменения в схему в _tables.xml, затем запускает триггеры в _triggers.xml и так далее.
_Triggers.xml databaseChangeLog выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
<changeSet id="tr_names_delete" author="PROD-1235" runOnChange="true" > <sqlFile path="triggers/tr_names_delete.sql" relativeToChangelogFile="true" /> </changeSet>
<changeSet id="tr_names_insert" author="PROD-1235" runOnChange="true" > <sqlFile path="triggers/tr_names_insert.sql" relativeToChangelogFile="true" /> </changeSet>
<changeSet id="tr_names_update" author="PROD-1235" runOnChange="true" > <sqlFile path="triggers/tr_names_update.sql" relativeToChangelogFile="true" /> </changeSet>
</databaseChangeLog>
У меня есть один набор изменений для каждого объекта. Чтобы я мог отслеживать изменения с течением времени в таблице DATABASECHANGELOG, я использую имя объекта в качестве идентификатора набора изменений и нашу проблему JIRA в качестве автора. Таким образом, ID будет оставаться неизменным с течением времени, но разработчики будут обновлять автора каждый раз, когда они изменяют объект. DatabaseChangeLogs для хранимых процедур, представлений и т. Д., Которые могут быть обновлены и повторно запускаться с течением времени, следуют этой же форме.
Кто-нибудь видит проблемы с таким подходом?
Спасибо за ваше время!