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)
Où 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
.