Liquibase insertタグを使用してデータを挿入しようとしています。値タグに数値を入力しているときは正常に動作します。しかし、テーブル定義の一部として持っていなくても、デフォルトの日付(データベースの現在のDateTime)を処理する単純な関数を探しています。
例えば:
<changeSet id="abc_1" author="Me">
<insert tableName="Emp" schemaName="XYZ">
<column name="name" value="Me"/>
<column name="create_date" value ="1328055111692"/>
<column name="profile_last_update" value="currentDateTimeFunction"/>
<column name="group_name" value="BlahBlah"/>
</insert>
</changeSet>
ここに <column name="create_date" value ="1328055111692"/>
は正常に機能し、データベースに挿入されます。また、<defaultValueDate>
および<valueDate>
ただし、指定された形式の日付入力も必要です。
currentDateTimeFunctionのような関数を探しています。これは、使用しているデータベースのタイプに基づいて、UNIX_TIMESTAMP()またはSYSDATEまたはnow()に変換されます。私を助けてください。
ありがとう、ラミーヤ
あなたがしなければならないことは、 changelog parameter sを使用し、データベースタイプごとに置き換えられる「now」または「current_timestamp」パラメーターを定義することです。
<databaseChangeLog>
、通常は<changeset>
、次のようなプロパティのデータベースごとの定義を追加します。
<property name="now" value="sysdate" dbms="Oracle"/>
<property name="now" value="now()" dbms="mysql"/>
<property name="now" value="now()" dbms="postgresql"/>
次に、変更セットで使用します
<column name="Join_date" defaultValueFunction="${now}"/>
DefaultValueFunctionの使用に注意してください。これにより、liquibaseは、日付として解析したり、引用したりしないようになります。
お返事ありがとうございます。役に立ちました。以下は私がやったことであり、私のために働いた。
<property name="now" value="UNIX_TIMESTAMP()" dbms="mysql"/>
<changeSet id="emp_1" author="Me">
<insert tableName="Emp" schemaName="XYZ">
<column name="EmpName" value="abc"/>
<column name="Join_date" valueDate="${now}"/>
<column name="Profile_last_update" valueDate="${now}"/>
<column name="group_name" value="BlahBlah"/>
</insert>
</changeSet>
ありがとう、ラミーヤ
DB2を使用している場合、次のことができます。
<changeSet id="emp_1" author="Me">
<insert tableName="Emp" schemaName="XYZ">
<column name="EmpName" value="abc"/>
<column name="Join_date" valueDate="CURRENT TIMESTAMP"/>
<column name="Profile_last_update" valueDate="CURRENT TIMESTAMP"/>
<column name="group_name" value="BlahBlah"/>
</insert>
</changeset>
結果のSQLは引用されないため、DB2関数を呼び出すだけです。
以下のようにそれを行う簡単な方法があります
mySQLにはvalueDate = "now()"を使用するだけです。私の場合のように:
<changeSet id="emp_1" author="Me">
<insert tableName="Emp" schemaName="XYZ">
<column name="last_updated_at" valueDate="now()"></column>
</insert>
</changeset>
Liquibase + Oracle:se valueComputed = "SYSDATE"
Oracle 11gと連携:
<insert tableName="SOMETABLE">
<column name="ID" valueComputed="SOMETABLE_SEQ.NEXTVAL" />
<column name="USER_ID" value="123" />
<column name="CREATED_DATE" valueComputed="SYSDATE" />
</insert>
ValueNumericを使用して関数を実行できます。これにより、値を引用符で囲むことができなくなります。
<column name="id" valueNumeric="uuid_generate_v4()"></column>
RamyaとAdam Dが投稿した回答は、PostgreSQLでも機能します。
「property」タグを使用して、dbmsをdbms="postgresql"
に変更し、 "value"(私の場合はCURRENT_TIMESTAMP
)にPostgreSQL関数を使用する必要がありました。
「property」タグなしで、「column」タグでvalueDate="CURRENT_TIMESTAMP"
を使用しました。
PostgreSQL 9.1.9とLiquibase 2.0.5を使用しています。