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