Liquibase: Comment définir la valeur par défaut d'une colonne de date à être “maintenant” en UTC format?
Comment pouvez-vous définir la valeur par défaut d'une colonne de date à être "maintenant" en UTC format? Je pense que la réponse implique la defaultValueComputed
attribut sur la élément de colonne.
Les états de documentation:
defaultValueComputed Une valeur qui est renvoyée par une fonction ou
appel de procédure. Cet attribut contient la fonction à appeler.
Quelle langue est la fonction de référence supposé être écrit dans? Java? Est la fonction qui est censé être le fournisseur de base de données spécifique à la fonction date, je veux utiliser? Est-il plus de documentation que je peux lire sur ce sujet?
Vous devez vous connecter pour publier un commentaire.
Peut-être cette rubrique dans le liquibase forum d'aide?
Je pense que
defaultValueComputed
prendra une base de données spécifique de la fonction d'exprimer le "maintenant". Dans mySQL, il seraitCURRENT_TIMESTAMP
de sorte qu'il pourrait ressembler à ceci:(Copié à partir du post sur le forum.)
defaultValueComputed="to_timestamp('2015-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')"
travaille également avec OracleDans MySQL, pour utiliser une colonne DATETIME avec des fractions de seconde comme
DATETIME(6)
(microsecondes de précision), utilisez la valeur par défaut deNOW(6)
(attention:CURRENT_TIMESTAMP(6)
pour une raison quelconque produit une erreur avec moi à l'aide de liquibase 3.5.3):Noter que la valeur sera stockée en interne dans l'UTC, mais le lire en utilisant le fuseau horaire du serveur paramètres (
@@global.time_zone
,@@session.time_zone
).Cela fonctionne avec SQlite:
Ajoutant '$maintenant " ne fonctionne pas pour moi. J'utilise SQlite comme base de données.
Comme liquibase est commun changelog pour toute base de données, pour le rendre générique, vous ne devriez pas compter sur une base de données spécifique, comme oracle, postegres, mysql au lieu de cela, il doit être suffisamment générique pour travailler pour n'importe quel/chaque base de données.
Ci-dessous est la façon dont il devrait être mis en œuvre :
Cela devrait fonctionner pour toutes les bases de données, oracle, il insère SYSTIMESTAMP comme DATA_DEFAULT.
J'ai utilisé la fonction de la base de données du fournisseur.
Pour Oracle, c'est un sysdate:
Cela a fonctionné pour moi:
Je l'ai trouvé grâce à cette réponse: https://stackoverflow.com/a/9100388/3107952