liquibase: insérer la date actuelle

j'essaie d'insérer des données en utilisant l'étiquette d'insertion liquibase. Cela fonctionne très bien quand je suis en train d'entrer un nombre à l'étiquette de valeur . Mais je suis à la recherche d'une fonction simple qui s'occupera de la date par défaut (DateTime actuelle de la base de données) même si Je ne l'ai pas dans ma définition de table.

par exemple:

<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>

ici <column name="create_date" value ="1328055111692"/> fonctionne très bien et il est inséré dans la base de données. J'ai aussi essayé d'utiliser <defaultValueDate> et <valueDate> mais ils ont aussi besoin d'une entrée de date dans specified format.

je suis à la recherche d'une certaine fonction comme currentDateTimeFunction qui serait converti en UNIX_TIMESTAMP() ou SYSDATE ou now () basé sur le type de base de données que j'utilise. S'il vous plaît aider moi.

Merci, Ramya

27
demandé sur Ramya 2012-02-01 05:49:31

7 réponses

ce que vous aurez à faire est d'utiliser paramètre changelogs et définissez un paramètre" now "ou" current_timestamp " qui est remplacé par type de base de données.

au sommet de votre <databaseChangeLog>, normalement juste à l'extérieur de votre <changeset>, ajoutez par-définitions de base de données de la propriété de la forme:

  <property name="now" value="sysdate" dbms="oracle"/>
  <property name="now" value="now()" dbms="mysql"/>
  <property name="now" value="now()" dbms="postgresql"/>

puis dans vos révisions utiliser

<column name="Join_date" defaultValueFunction="${now}"/>

notez l'utilisation de defaultValueFunction qui permettra à liquibase de savoir ne pas l'analyser comme une date ou un devis il.

47
répondu Nathan Voxland 2016-04-09 10:28:26

Merci pour votre réponse. il a été utile. Ci-dessous, ce que j'ai fait et cela a fonctionné pour moi.

<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>

Merci encore, Ramya

14
répondu Ramya 2017-07-25 05:16:12

Si vous utilisez DB2, alors vous pouvez faire ce qui suit:

<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>

le SQL résultant n'est pas cité donc il appelle simplement la fonction DB2.

4
répondu Adam D 2012-02-23 10:06:15

Liquibase + Oracle: use valueComputed= "SYSDATE"

Travaillé avec 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>
1
répondu Witold Kaczurba 2018-08-14 15:09:06

vous pouvez utiliser valueNumeric pour exécuter des fonctions, car il empêchera l'enroulement de citations autour de la valeur.

<column name="id" valueNumeric="uuid_generate_v4()"></column>
0
répondu Nic 2014-02-06 14:46:36

Les réponses posté par Ramya et Adam D, travaille pour PostgreSQL.

en utilisant la balise" propriété", j'ai dû changer le SGBD en dbms="postgresql" et d'utiliser une fonction PostgreSQL pour "value" (CURRENT_TIMESTAMP dans mon cas).

Sans la "propriété" de la balise, j'ai utilisé valueDate="CURRENT_TIMESTAMP" dans l'étiquette "colonne".

J'utilise PostgreSQL 9.1.9 et Liquibase 2.0.5.

0
répondu raafaar 2014-02-19 10:40:59

Il y a une façon simple de le faire donnée comme ci-dessous

Vous pouvez simplement utiliser valueDate= "now ()" pour MySQL. Comme dans mon cas, j'ai fait:

    <changeSet id="emp_1" author="Me">
       <insert tableName="Emp" schemaName="XYZ">
         <column name="last_updated_at" valueDate="now()"></column>
       </insert>
    </changeset>
0
répondu Gourav Singla 2014-02-20 05:59:17