2013-03-18 30 views
2

在執行'modifyDataType'時,liquibase可以執行某種映射嗎?在更改列中的數據類型時將int轉換爲值

考慮下面的例子:

<changeSet id="1" author="me"> 
    <createTable tableName="person"> 
     <column name="id" type="int"> 
      <constraints primaryKey="true" nullable="false" /> 
     </column> 
     <column name="firstName" type="varchar(100)"></column> 
     <column name="lastName" type="varchar(100)"></column> 
     <column name="marital_status" type="int"> 
      <constraints nullable="false" /> 
     </column> 
    </createTable> 
</changeSet> 
<changeSet id="2" author="me"> 
    <modifyDataType tableName="person" columnName="type" 
     newDataType="varchar(36)" /> 
</changeSet> 

我想在我的專欄 '類型' 時出現的以下映射:

0->single 
1->married 
etc.. 

這可能與liquibase?我通過命令行使用它。

回答

3

我認爲這不可能直接通過某種映射或重構。要做到這一點

一種方法是使用sql並把這個成是改變數據類型後立刻運行另一個變更:

<changeSet id="3" author="me"> 
    <sql> 
     update person set martial_status = 'single' where martial_status = 0; 
     update person set martial_status = 'married' where martial_status = 1; 
    </sql> 
</changeSet> 

我只是寫下來的想法。它未經測試。

只有當ID爲2的變更集成功運行時,纔可以添加precondition來執行此變更集。

+0

我使用命令而不是來保持數據庫不可知,但其餘部分運行良好。謝謝 – phury 2013-03-20 16:57:40

相關問題