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

Comment fonctionne LocalTime() dans PostgreSQL

Dans PostgreSQL, le localtime renvoie l'heure locale du jour, sans décalage de fuseau horaire.

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

Syntaxe

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

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

Résultat :

15:50:25.314626

Exemple - Précision spécifique

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

SELECT localtime(0);

Résultat :

15:50:44

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

Résultat :

15:50:59.039

Transactions

L'heure réelle est basée 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 localtime;
SELECT pg_sleep(5);
SELECT localtime;
SELECT pg_sleep(5);
SELECT localtime;
COMMIT;

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

postgres=# BEGIN;
BEGIN
postgres=# SELECT localtime;
    localtime    
-----------------
 09:22:40.096909
(1 row)


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


postgres=# SELECT localtime;
    localtime    
-----------------
 09:22:40.096909
(1 row)


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


postgres=# SELECT localtime;
    localtime    
-----------------
 09:22:40.096909
(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 
  localtime,
  pg_sleep(5),
  localtime,
  pg_sleep(5),
  localtime;

Résultat (en utilisant la sortie verticale) :

localtime | 09:23:45.108559
pg_sleep  | 
localtime | 09:23:45.108559
pg_sleep  | 
localtime | 09:23:45.108559

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 à localtime .

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 .