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

Comment fonctionne LocalTimeStamp() dans PostgreSQL

Dans PostgreSQL, le localtimestamp() La fonction renvoie la date et l'heure locales, sans décalage de fuseau horaire.

Si vous avez besoin du décalage horaire, utilisez current_timestamp() à la place.

Syntaxe

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

localtimestamp
localtimestamp(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 localtimestamp;

Résultat :

2020-07-01 15:55:48.039777

Exemple - Précision spécifique

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

SELECT localtimestamp(0);

Résultat :

2020-07-01 15:56:02

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 localtimestamp(3);

Résultat :

2020-07-01 15:56:14.771

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 localtimestamp;
SELECT pg_sleep(5);
SELECT localtimestamp;
SELECT pg_sleep(5);
SELECT localtimestamp;
COMMIT;

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

postgres=# BEGIN;
BEGIN
postgres=# SELECT localtimestamp;
      localtimestamp      
--------------------------
 2020-07-02 09:25:38.3858
(1 row)


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


postgres=# SELECT localtimestamp;
      localtimestamp      
--------------------------
 2020-07-02 09:25:38.3858
(1 row)


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


postgres=# SELECT localtimestamp;
      localtimestamp      
--------------------------
 2020-07-02 09:25:38.3858
(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 
  localtimestamp,
  pg_sleep(5),
  localtimestamp,
  pg_sleep(5),
  localtimestamp;

Résultat (en utilisant la sortie verticale) :

localtimestamp | 2020-07-02 09:26:46.743801
pg_sleep       | 
localtimestamp | 2020-07-02 09:26:46.743801
pg_sleep       | 
localtimestamp | 2020-07-02 09:26:46.743801

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

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

Dans cet exemple, 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 .