Как работать с ликвидазой, конкретный пример - PullRequest
32 голосов
/ 19 июля 2009

После быстрого запуска на 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 и ..lock.

Теперь, как я могу отслеживать изменения ?? я изменил набор изменений, добавив новый элемент createTable, но когда я попробую команду «обновить», liquibase сообщает мне об этом

Migration Failed: Validation Failed:
     1 change sets check sum

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

Кто-то может указать мне правильное направление ??

Спасибо

Ответы [ 3 ]

39 голосов
/ 19 июля 2009

Вы никогда не должны изменять <changeSet>, который уже был выполнен. Liquibase вычисляет контрольные суммы для всех выполненных наборов изменений и сохраняет их в журнале. Затем он пересчитает эту контрольную сумму, сравнит ее с сохраненными и потерпит неудачу при следующем запуске, если контрольные суммы различаются.

Вместо этого вам нужно добавить еще один <changeSet> и вставить в него новый элемент createTable.

QuickStart хорошо читается, но он действительно быстр :-) Ознакомьтесь с полным руководством , в частности с разделом ChangeSet .

27 голосов
/ 07 ноября 2011

Этот принятый в настоящее время ответ несколько устарел из-за изменений в Liquibase 2.x. В версии 2.x Liquibase все равно не будет работать, если контрольная сумма md5 изменилась для набора изменений, но вы можете указать атрибут runOnChange , если вы хотите изменить его.

Из документации :

runOnChange - выполняет изменение при первом его просмотре и каждый раз при изменении набора изменений

3 голосов
/ 12 июля 2013

Если это изменение в наборе изменений, которое в основном уже сделано, вы можете вручную изменить базу данных так, чтобы ее md5 для этого набора изменений соответствовал новому. Хорошо для небольших текстовых изменений. Или вы можете удалить эту строку набора изменений из вашей таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...