Как работать с 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 для этого набора изменений соответствовал новому. Хорошо для незначительных изменений. Или вы можете удалить эту строку набора с вашего стола.