2015-04-20 3 views
1

Мы будем использовать значения параметров жидкости для управления типами столбцов на нескольких поддерживаемых ядрах базы данных. Я хотел бы иметь возможность указывать типы столбцов в файле изменений. Во-первых, для всех dbms и (то есть что-то из java.sql.Types. *), А затем перезаписывайте его для некоторых конкретных.Обработка значений нескольких параметров в липибазе

Это может выглядеть следующим образом:

<property name="DATETIME.type" value="TIMESTAMP"/> 
<property name="DATETIME.type" value="DATE" dbms="oracle" /> 

Но LiquiBase, кажется, берет первое найденное значение параметра (т оракула типа TIMESTAMP берется в приведенном выше примере). Могу ли я надежно достичь желаемого результата, просто изменив порядок строк, как это ?:

<property name="DATETIME.type" value="DATE" dbms="oracle" /> 
<property name="DATETIME.type" value="TIMESTAMP"/> 

EDIT: То, что я хотел бы архивировать, является поддержка новых баз данных без необходимости изменения типов сопоставление - поэтому использовать типы linibase default (java.sql.Types. *) для баз данных, для которых не требуется совместимость с нашим устаревшим средством db-версии.

ответ

0

Я задал аналогичный вопрос о том, как различать базы данных в Liquibase here.

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

<changeSet id="1" author="bob"> 
    <preConditions onFail="CONTINUE"> 
     <not> 
      <dbms type="oracle" /> 
     </not> 
    </preConditions> 

     // contents of your changeset here 
     <property name="DATETIME.type" value="TIMESTAMP"/> 

</changeSet> 
+0

В настоящее время мы имеем более 1500 наборов изменений в списке изменений, импортируемых из нашей БД. Я не могу себе представить, как реализовать независимость базы данных таким образом. Наш Oracle «Integer» представлен «Число (9)», а не «Номер» (10), «LONGVARBINARY» с «IMAGE» на mssql. И я должен обеспечить совместимость версий linibase с нашим предыдущим унаследованным db-управлением версиями. –

+0

Я думаю - вообще - независимость базы данных (или должна) уже встроена в липибазу, так что вам вообще не придется об этом думать. Liquibase поставляется с базальными диалектами, и в то время как он анализирует ваш журнал изменений, он переводит базу данных в нужный тип данных для конкретной базы данных. Так оно и должно работать. Но если у вас есть требования, требующие других типов, вам, вероятно, придется использовать что-то вроде 'preConditions' для его обработки. – Jens

+0

Другим подходом может быть использование системы расширения, которую предлагает Liquibase и перезаписывающая обработка по умолчанию с вашими конкретными требованиями. Но я не знаю, позволяет ли система расширения перехватить обработку типов ... – Jens

Смежные вопросы