Je veux que le code puisse mettre à jour automatiquement l'horodatage lorsqu'une nouvelle ligne est insérée, comme je peux le faire dans MySQL en utilisant CURRENT_TIMESTAMP.
Comment pourrais-je y parvenir dans PostgreSQL?
CREATE TABLE users (
id serial not null,
firstname varchar(100),
middlename varchar(100),
lastname varchar(100),
email varchar(200),
timestamp timestamp
)
database
postgresql
timestamp
Aaron
la source
la source
timestamp
est défini par la spécification SQL comme une abréviation deTIMESTAMP WITHOUT TIME ZONE
. Ce n'est certainement pas ce que vous voulez, comme l'a expliqué l'expert Postgres David E. Wheeler . L'autre type,TIMESTAMP WITH TIME ZONE
est probablement ce que vous voulez, en utilisant toutes les informations de décalage de fuseau horaire passées pour ajuster la date-heure à UTC (mais pas réellement en stockant ces informations de fuseau horaire malgré le nom du type).Réponses:
Pour remplir la colonne lors de l'insertion, utilisez une
DEFAULT
valeur:Notez que la valeur de cette colonne peut être explicitement écrasée en fournissant une valeur dans l'
INSERT
instruction. Si vous voulez éviter cela, vous avez besoin d'un déclencheur .Vous avez également besoin d'un déclencheur si vous devez mettre à jour cette colonne chaque fois que la ligne est mise à jour (comme mentionné par EJ Brennan )
Notez que l'utilisation de mots réservés pour les noms de colonnes n'est généralement pas une bonne idée. Vous devriez trouver un nom différent de
timestamp
la source
timestamp
entimestamp_
. Encore mieux serait un nom plus descriptif tel querow_created_
.Vous devrez écrire un déclencheur d'insertion, et éventuellement un déclencheur de mise à jour si vous voulez qu'il change lorsque l'enregistrement est modifié. Cet article l'explique assez bien:
http://www.revsys.com/blog/2006/aug/04/automatically-updating-a-timestamp-column-in-postgresql/
la source
Mise à jour de l'horodatage, uniquement si les valeurs ont changé
Sur la base du lien d'EJ et ajoutez une instruction if à partir de ce lien ( https://stackoverflow.com/a/3084254/1526023 )
la source
L'utilisation de «now ()» comme valeur par défaut génère automatiquement un horodatage.
la source