In PostgreSQL, il localtimestamp()
La funzione restituisce la data e l'ora locali, senza l'offset del fuso orario.
Se hai bisogno dell'offset del fuso orario, usa current_timestamp()
invece.
Sintassi
Puoi usarlo in uno dei seguenti modi:
localtimestamp
localtimestamp(x)
Dove x
è un parametro di precisione facoltativo, che fa sì che il risultato venga arrotondato a x
numero di cifre frazionarie nel campo dei secondi.
Senza un parametro di precisione (la prima sintassi), il risultato viene assegnato alla piena precisione disponibile.
Esempio:precisione totale
Ecco un esempio di base per dimostrare un risultato utilizzando tutta la precisione disponibile.
SELECT localtimestamp;
Risultato:
2020-07-01 15:55:48.039777
Esempio – Precisione specifica
Ecco un esempio per dimostrare come specificare la precisione.
SELECT localtimestamp(0);
Risultato:
2020-07-01 15:56:02
In questo esempio, ho specificato una precisione pari a zero, il che significa che non sono stati restituiti secondi frazionari.
Ecco un altro esempio in cui specifico un numero di secondi frazionari.
SELECT localtimestamp(3);
Risultato:
2020-07-01 15:56:14.771
Transazioni
Il timestamp effettivo si basa sull'ora di inizio della transazione corrente. Pertanto, non cambia con l'avanzamento della transazione.
Ciò consente a una singola transazione di avere una nozione coerente dell'ora "corrente", in modo che più modifiche all'interno della stessa transazione abbiano lo stesso timestamp.
Ecco un esempio che lo dimostra.
BEGIN;
SELECT localtimestamp;
SELECT pg_sleep(5);
SELECT localtimestamp;
SELECT pg_sleep(5);
SELECT localtimestamp;
COMMIT;
Ecco l'output completo del mio terminale durante l'esecuzione di quella transazione in psql:
postgres=# BEGIN; BEGIN postgres=# SELECT localtimestamp; localtimestamp -------------------------- 2020-07-02 09:25:38.3858 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT localtimestamp; localtimestamp -------------------------- 2020-07-02 09:25:38.3858 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT localtimestamp; localtimestamp -------------------------- 2020-07-02 09:25:38.3858 (1 row) postgres=# COMMIT; COMMIT
Tutti e tre i valori temporali sono identici, anche se pg_sleep()
è stata utilizzata per ritardare l'esecuzione tra ogni istruzione all'interno della transazione.
Questo è in contrasto con statement_timestamp()
che fa cambia ad ogni affermazione.
Più chiamate all'interno di un estratto conto
Inoltre, non cambia man mano che l'istruzione avanza.
\x
SELECT
localtimestamp,
pg_sleep(5),
localtimestamp,
pg_sleep(5),
localtimestamp;
Risultato (usando l'output verticale):
localtimestamp | 2020-07-02 09:26:46.743801 pg_sleep | localtimestamp | 2020-07-02 09:26:46.743801 pg_sleep | localtimestamp | 2020-07-02 09:26:46.743801
Tutti e tre i valori temporali sono identici, anche se pg_sleep()
è stata utilizzata per ritardare l'esecuzione tra ogni chiamata a localtimestamp
.
Questo è in contrasto con clock_timestamp()
funzione, che fa cambia man mano che avanza nell'istruzione.
In questo esempio, ho utilizzato l'output verticale (noto anche come output espanso) per rendere i risultati leggermente più compatti.
Puoi attivare o disattivare l'output espanso in psql usando \x
.