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

Fonctionnement de statement_timestamp() dans PostgreSQL

Dans PostgreSQL, le statement_timestamp() La fonction renvoie la date et l'heure actuelles (y compris le décalage de fuseau horaire), au début de l'instruction en cours.

La fonction n'accepte aucun paramètre, vous ne pouvez donc pas spécifier sa précision.

Aussi, statement_timestamp() est une fonction non standard SQL.

Syntaxe

La syntaxe ressemble à ceci :

statement_timestamp()

Aucun argument n'est requis ou accepté.

Exemple de base

Voici un exemple de base pour illustrer.

SELECT statement_timestamp();

Résultat :

2020-07-02 09:30:45.46903+10

Dans le cadre d'une transaction

Voici un exemple pour montrer comment cela fonctionne dans une transaction.

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

Voici la sortie complète dans mon terminal lors de l'utilisation de psql :

postgres=# BEGIN;
BEGIN
postgres=# SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2020-07-02 09:31:13.363128+10
(1 row)


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


postgres=# SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2020-07-02 09:31:18.424503+10
(1 row)


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


postgres=# SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2020-07-02 09:31:23.501539+10
(1 row)


postgres=# COMMIT;
COMMIT

Dans cet exemple, j'ai utilisé le pg_sleep() fonction pour retarder l'exécution entre chaque instruction.

Parce que chaque statement_timestamp() l'appel était dans sa propre instruction SQL, l'horodatage renvoyé était différent à chaque appel.

Ceci est en contraste avec transaction_timestamp() , ce qui ne fait pas changer à chaque énoncé. Il renvoie son horodatage en fonction de l'heure de début de la transaction.

Plusieurs appels dans un relevé

Voici un exemple de ce qui se passe si nous combinons les trois appels de fonction dans une seule instruction SQL.

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

Résultat (en utilisant la sortie verticale) :

statement_timestamp | 2020-07-02 09:34:41.06911+10
pg_sleep            | 
statement_timestamp | 2020-07-02 09:34:41.06911+10
pg_sleep            | 
statement_timestamp | 2020-07-02 09:34:41.06911+10

Cette fois, les trois valeurs d'horodatage sont identiques, même si le pg_sleep() la fonction a été utilisée pour retarder l'exécution entre chaque appel à statement_timestamp() .

Ceci est en contraste avec le clock_timestamp() fonction, qui change même au fur et à mesure qu'elle progresse dans l'instruction (si elle est appelée plusieurs fois dans l'instruction).