PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

L'horodatage Postgres now() ne change pas, lorsque le script fonctionne

De TFM, souligne le mien :

9.9.4. Date/heure actuelle

PostgreSQL fournit un certain nombre de fonctions qui renvoient des valeurs liées à la date et à l'heure actuelles. Ces fonctions standard SQL retournent toutes des valeurs basées sur l'heure de début de la transaction en cours :

CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_TIME(precision)
CURRENT_TIMESTAMP(precision)
LOCALTIME
LOCALTIMESTAMP
LOCALTIME(precision)
LOCALTIMESTAMP(precision)

...

Étant donné que ces fonctions renvoient l'heure de début de la transaction en cours, leurs valeurs ne changent pas pendant la transaction. Ceci est considéré comme une fonctionnalité :l'intention est de permettre à une seule transaction d'avoir une notion cohérente de l'heure "actuelle", de sorte que plusieurs modifications au sein d'une même transaction portent le même horodatage.

PostgreSQL fournit également des fonctions qui renvoient l'heure de début de l'instruction en cours, ainsi que l'heure actuelle réelle à l'instant où la fonction est appelée. La liste complète des fonctions temporelles non standard SQL est :

transaction_timestamp()
statement_timestamp()
clock_timestamp()
timeofday()
now()

transaction_timestamp() est équivalent à CURRENT_TIMESTAMP , mais est nommé pour refléter clairement ce qu'il renvoie. statement_timestamp() renvoie l'heure de début de l'instruction en cours (plus précisément, l'heure de réception du dernier message de commande du client).statement_timestamp() et transaction_timestamp() renvoie la même valeur lors de la première commande d'une transaction, mais peut différer lors des commandes suivantes. clock_timestamp() renvoie l'heure actuelle actuelle , et par conséquent sa valeur change même au sein d'une seule commande SQL. timeofday() est une fonction PostgreSQL historique. Comme clock_timestamp() , il renvoie l'heure actuelle réelle, mais sous la forme d'une chaîne de texte formatée plutôt que d'un horodatage avec une valeur de fuseau horaire.now() est un équivalent PostgreSQL traditionnel à transaction_timestamp() .