Предварительные условия для Liquibase: Как проверить правильность типа данных для столбца? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть скрипт обновления базы данных, чтобы изменить некоторые типы данных в нескольких столбцах. Я хочу выполнить проверку предварительных условий и вызывать ALTER TABLE только тогда, когда это тип данных DECIMAL, но я хочу, чтобы он был изменен на INTEGER.

Не удалось найти предопределенное предварительное условие для этого, а также не удалось написать sqlcheck.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

В другом ответе уже упоминается, как выполнить sqlcheck. Однако фактический SQL для Teradata был бы чем-то другим.

В Teradata вы используете запрос, подобный следующему, и ожидаете columnType = 'D' для десятичных значений

Select ColumnType 
From DBC.ColumnsV 
Where databasename='yourdatabasename' 
and tablename='yourtablename' 
and columnname='yourcolumnname';

Вы также можете сделать что-то подобное, если вы хотите, чтобы тип столбца был более читабельным для человека вместо кода типа:

Select Type(tablename.columnname);
0 голосов
/ 10 мая 2018

Нет встроенного precondition для столбца dataType в liquibase. Вы можете просто проверить, существует столбец или нет. Если он уже соответствует нужному типу данных, ошибка не выдается.

OR

Вы можете использовать sqlCheck в своих предварительных условиях, и это будет примерно так:

<preConditions onFail="MARK_RAN">
    <not>
        <sqlCheck expectedResult="DECIMAL">
            SELECT DATA_TYPE
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_NAME = 'your_table_name'
            AND COLUMN_NAME = 'your_column_name'
        </sqlCheck>
    </not>
</preConditions>
...