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

Как работать с ликбазой, конкретный пример

После быстрого запуска 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, но когда я попробую команду "update" Liquibase, мне это говорит

Migration Failed: Validation Failed:
     1 change sets check sum

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

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

Спасибо

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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