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