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

Fonctionnement de current_timestamp() dans PostgreSQL

Dans PostgreSQL, le current_timestamp() renvoie la date et l'heure actuelles, y compris le décalage horaire.

L'horodatage renvoyé est basé sur l'heure de début de la transaction en cours.

Syntaxe

Vous pouvez l'utiliser de l'une des manières suivantes :

current_timestamp
current_timestamp(x)

x est un paramètre de précision facultatif, qui entraîne l'arrondi du résultat à x nombre de chiffres fractionnaires dans le champ des secondes.

Sans paramètre de précision (la première syntaxe), le résultat est donné à la précision disponible complète.

Exemple – Précision totale

Voici un exemple de base pour démontrer un résultat en utilisant toute la précision disponible.

SELECT current_timestamp;

Résultat :

2020-07-01 15:42:35.630594+10

Exemple - Précision spécifique

Voici un exemple pour montrer comment spécifier la précision.

SELECT current_timestamp(0);

Résultat :

2020-07-01 15:42:58+10

Dans cet exemple, j'ai spécifié une précision de zéro, ce qui signifie qu'aucune fraction de seconde n'a été renvoyée.

Voici un autre exemple où je spécifie un nombre de fractions de seconde.

SELECT current_timestamp(3);

Résultat :

2020-07-01 15:43:16.644+10

Transactions

L'horodatage réel est basé sur l'heure de début de la transaction en cours. Par conséquent, il ne change pas au fur et à mesure que la transaction progresse.

Cela permet à 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.

Voici un exemple qui le démontre.

BEGIN;
SELECT current_timestamp;
SELECT pg_sleep(5);
SELECT current_timestamp;
SELECT pg_sleep(5);
SELECT current_timestamp;
COMMIT;

Voici la sortie complète de mon terminal lors de l'exécution de cette transaction dans psql :

postgres=# BEGIN;
BEGIN
postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


postgres=# SELECT pg_sleep(5);
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


postgres=# SELECT pg_sleep(5);
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


postgres=# COMMIT;
COMMIT

Les trois valeurs de temps sont identiques, même si le pg_sleep() fonction a été utilisée pour retarder l'exécution entre chaque instruction dans la transaction.

Ceci est en contraste avec statement_timestamp() qui fait changer à chaque instruction.

Plusieurs appels dans un relevé

Cela ne change pas non plus au fur et à mesure que la déclaration progresse.

\x
SELECT 
  current_timestamp,
  pg_sleep(5),
  current_timestamp,
  pg_sleep(5),
  current_timestamp;

Résultat (en utilisant la sortie verticale) :

current_timestamp | 2020-07-02 09:04:03.413062+10
pg_sleep          | 
current_timestamp | 2020-07-02 09:04:03.413062+10
pg_sleep          | 
current_timestamp | 2020-07-02 09:04:03.413062+10

Les trois valeurs de temps sont identiques, même si le pg_sleep() la fonction a été utilisée pour retarder l'exécution entre chaque appel à current_timestamp .

Ceci est en contraste avec le clock_timestamp() fonction, qui fait changer au fur et à mesure de sa progression dans l'instruction.

Au fait, j'ai utilisé la sortie verticale (également appelée sortie étendue) pour rendre les résultats légèrement plus compacts.

Vous pouvez basculer la sortie développée dans psql en utilisant \x .