Лучшие практики по предварительным условиям ликвидазы - PullRequest
1 голос
/ 06 апреля 2020

Я ищу лучшие практики, когда следует использовать предварительные условия в жидкой базе. Я понимаю тот факт, что он помогает в проверке существующего состояния БД, а затем применяет изменения. Если я собираюсь использовать liquibase с самого начала, и все изменения будут сделаны через liquibase, не должно ли changeSet Id быть достаточно, чтобы проверить / проверить существующее состояние? Написание предварительных условий кажется мне более излишним в таком случае. Я не смог найти хорошего документа по этому вопросу.

В моем случае я буду использовать liquibase для изменения схемы БД + добавления метаданных в пару таблиц. Я вижу несколько примеров запросов на изменение схемы БД, таких как добавление таблицы, столбца и т. Д. c, где были использованы предварительные условия. Но не вижу много вокруг нормальных запросов вставки, обновления, удаления. Это хорошая практика, чтобы написать предварительные условия для таких запросов данных манипуляций, а также? Есть ли хорошая документация по этому поводу?

1 Ответ

2 голосов
/ 06 апреля 2020

Да - вы должны написать предварительные условия. На каждый набор изменений. Всегда. Ваш набор изменений должен быть не более 1025 *, поэтому написание предварительных условий для них не должно быть трудным. Требуется лишь немного самоконтроля.

Нет - идентификатора changeSet недостаточно для проверки / проверки существующего состояния. Этого может быть достаточно в идеальном мире, где все работает очень гладко, ошибок нет, и никто не возится с базой данных своими грязными руками. Или кто-то может вставить какой-то другой набор изменений в центр вашего databaseChangeLog, и идеальный поток, основанный только на последовательности и идентичности наборов изменений, будет нарушен.

Но наш мир не идеален, поэтому Нет , ID changeSet недостаточно. Вам необходимы предварительные условия.

Кроме того, проверьте этот вопрос , если хотите узнать больше о том, как определяется личность набора изменений.


Чтобы ответить на Вторая часть вашего вопроса о проверке данных перед выполнением запросов вставки, обновления и удаления:

Вы всегда можете использовать тег <sqlCheck>.

<changeSet id="foo" author="bar">
    <preConditions onFail="MARK_RAN">
        <sqlCheck expectedResult="0">
            SELECT COUNT(*) FROM user WHERE full_name='John Doe';
        </sqlCheck>
    </preConditions>
    <sql>
       <!-- your custom SQL query here which modifies data somehow -->
    </sql>
</changeSet>
...