Как работать с liquibase, конкретный пример
после быстрого запуска на liquibase Я создал набор изменений (очень стремно :) )
код:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.6"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.6
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.6.xsd">
<changeSet id="1" author="me">
<createTable tableName="first_table">
<column name="id" type="int">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(50)">
<constraints nullable="false"/>
</column>
</createTable>
<createTable tableName="new_table">
<column name="id" type="int">
<constraints primaryKey="true" nullable="false"/>
</column>
</createTable>
</changeSet>
</databaseChangeLog>
Я создал чистую схему и я запустил команду migrate.
Liquibase создал базу данных, с таблицами поддержки databasechangelog и ..замок.
теперь, как я могу отслеживать изменения?? я изменил набор изменений, добавив новый элемент createTable, но когда я пытаюсь выполнить команду "обновить", liquibase сообщает мне это
Migration Failed: Validation Failed:
1 change sets check sum
поэтому я не думаю, что понял, как работать с liquibase.
кто-то может мне точку в правильном направлении??
спасибо
3 ответов
вы никогда не должны изменить <changeSet>
Это уже было выполнено. При вычисляет контрольные суммы всех выполненных изменений и сохраняет их в журнале. Затем он пересчитает эту контрольную сумму, сравните ее с сохраненными и не выполнит ее при следующем запуске, если контрольные суммы отличаются.
вместо этого вам нужно добавить другое <changeSet>
и поместите в него свой новый элемент createTable.
QuickStart хорошее чтение, но это действительно быстро :-) Проверьте полный руководство, особенно изменений.
этот принятый в настоящее время ответ немного устарел на основе изменений в Liquibase 2.х. В 2.версия x, Liquibase все равно завершится ошибкой, если контрольная сумма md5 изменилась для набора изменений, но вы можете указать runOnChange атрибут, если вы хотите иметь возможность изменять его.
с документация:
runOnChange - выполняет изменение при первом просмотре и каждый раз, когда набор изменений был изменено
Если это изменение набора изменений, которое в основном уже сделано,вы можете вручную изменить базу данных, чтобы ее md5 для этого набора изменений соответствовал новому. Хорошо для незначительных изменений. Или вы можете удалить эту строку набора с вашего стола.