PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come funziona statement_timestamp() in PostgreSQL

In PostgreSQL, il statement_timestamp() La funzione restituisce la data e l'ora correnti (incluso l'offset del fuso orario), all'inizio dell'istruzione corrente.

La funzione non accetta alcun parametro, quindi non è possibile specificarne la precisione.

Inoltre, statement_timestamp() è una funzione non standard SQL.

Sintassi

La sintassi è questa:

statement_timestamp()

Nessun argomento è richiesto o accettato.

Esempio di base

Ecco un esempio di base da dimostrare.

SELECT statement_timestamp();

Risultato:

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

All'interno di una transazione

Ecco un esempio per dimostrare come funziona all'interno di una transazione.

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

Ecco l'output completo all'interno del mio terminale quando si utilizza 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

In questo esempio ho usato pg_sleep() funzione per ritardare l'esecuzione tra ogni istruzione.

Perché ogni statement_timestamp() chiamata era nella propria istruzione SQL, il timestamp restituito era diverso per ogni chiamata.

Questo è in contrasto con transaction_timestamp() , cosa che non cambia ad ogni affermazione. Restituisce il suo timestamp in base all'ora di inizio della transazione.

Più chiamate all'interno di un estratto conto

Ecco un esempio di cosa succede se combiniamo tutte e tre le chiamate di funzione all'interno di una singola istruzione SQL.

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

Risultato (usando l'output 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

Questa volta, tutti e tre i valori di timestamp sono identici, anche se pg_sleep() è stata utilizzata per ritardare l'esecuzione tra ogni chiamata a statement_timestamp() .

Questo è in contrasto con clock_timestamp() funzione, che cambia anche mentre avanza nell'istruzione (se richiamata più volte all'interno dell'istruzione).