liquibaseでカラム追加する際に、カラム追加位置を指定する方法。

前提

  • ここに書くのは、MySQLの場合のケースです。

addColumnではカラム追加位置は指定できない

addColumn にはカラム追加位置を指定するオプションはありません。
Support for ordering of columns in addColumn – liquibase.jira.com
liquibaseのver3.0向けのIssueにも挙がっているようです。

が・・・

それ、modifySqlでできるよ

liquibaseには、生成されるSQLを補正する modifySql というタグがあります。
これを使うと、生成されるSQLの先頭や末尾に指定した文字列を付加したり、文字列置換(正規表現でも)することができます。

MySQLでは、ALTERでカラム追加する際には“after カラム名“などを末尾につければ追加位置が指定できるので、liquibaseが生成するALTER文の末尾に“after カラム名“をつけるようにmodifySqlタグで指定してあげればよい。

<changeSet id="1" author="xxxxxxxx">
  <addColumn tableName="some_table">
    <column name="column_b" type="varchar(100)">
      <constraints nullable="false"/>
    </column>
  </addColumn>
  <modifySql>                          <!-- modifySqlを追加 -->
    <append value=" after column_a"/>  <!-- valueは先頭1個スペース -->
  </modifySql>
</changeSet>

このように書けば、ALTER文の末尾に” after column_a“が付加され、column_aの後ろにcolumn_bを追加することができます。

modifySqlがあれば大抵のことはなんとかなる

このように、modifySqlによって、後から文字列追加・置換ができるので、liquibase標準で実装されていないことがあっても、大抵のことはなんとかなると思います。