Liquibase: comment définir la valeur par défaut d'une colonne date pour qu'elle soit "maintenant" au format UTC?

Comment définissez-vous la valeur par défaut d'une colonne date pour être "maintenant" au format UTC? Je pense que la réponse implique l' defaultValueComputed attribut Élément de colonne.

La documentation:

defaultValueComputed Une valeur qui est renvoyée par une fonction ou appel de procédure. Cet attribut contient la fonction à appeler.

dans quelle langue la fonction mentionnée est-elle censée être écrite? Java? Est le la fonction est censée être la fonction date propre au vendeur de la base de données que je veux utiliser? Y a-t-il d'autres documents que je peux lire sur ce sujet?

21
demandé sur Jeff 2014-05-08 22:53:22

6 réponses

Peut-être ce sujet dans le forum liquibase aidera?

je pense que defaultValueComputed prendra une fonction spécifique à la base de données pour exprimer "maintenant". Dans mySQL, il serait CURRENT_TIMESTAMP donc il pourrait ressembler à ceci:

<createTable tableName="D_UserSession">
    <column name="ts" type="TIMESTAMP" defaultValueComputed="CURRENT_TIMESTAMP"/>
</createTable>

(Copié à partir du post sur le forum.)

21
répondu Jens 2014-05-09 10:34:20

cela fonctionne avec SQlite:

<column name="last_updated_at" type="TIMESTAMP" defaultValueComputed="CURRENT_TIMESTAMP">
                <constraints nullable="false"/>
</column>

ajouter '$ now ' n'a pas fonctionné pour moi. J'utilise SQlite comme base de données.

2
répondu Neha 2017-03-09 14:49:12

Dans MySQL, pour utiliser une colonne DATETIME avec des fractions de seconde comme DATETIME(6) (précision microsecondes), utilisez la valeur par défaut de NOW(6) (attention: CURRENT_TIMESTAMP(6) pour une raison quelconque produit une erreur avec moi à l'aide de liquibase 3.5.3):

<column name="created_at" type="DATETIME(6)" defaultValueComputed="NOW(6)" >
   <constraints nullable="false" />
</column>

notez que la valeur sera stockée en interne dans UTC, mais lue en utilisant les paramètres du fuseau horaire du serveur (@@global.time_zone,@@session.time_zone).

2
répondu Pavel S. 2017-10-30 13:24:21

Cela a fonctionné pour moi:

<column name="ts" type="timestamp" valueDate="${now}"/>

je l'ai trouvé grâce à cette réponse: https://stackoverflow.com/a/9100388/3107952

1
répondu Pedro Madrid 2017-05-23 12:02:40

comme liquibase est un changelog courant pour n'importe quelle base de données, pour la rendre Générique, vous ne devriez pas dépendre d'une base de données spécifique comme oracle, postèges, mysql à la place, il devrait être assez générique pour fonctionner pour n'importe quelle/chaque base de données.

ci-Dessous est la façon dont il devrait être mis en œuvre :

<column name="time" type="${type.datetime}" defaultValueComputed="${column.datetime.defaultValue}"/>

cela devrait fonctionner pour toutes les bases de données, pour oracle, il insère SYSTIMESTAMP comme DATA_DEFAULT.

1
répondu Sagar Jani 2017-12-27 01:16:31

j'ai utilisé la fonction vendeur de base de données. Pour Oracle c'est un sysdate:

<column name="create_date" type="DATETIME" valueDate="sysdate" defaultValueComputed="sysdate" />
0
répondu 0x5a4d 2016-08-05 13:33:33