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

Come funziona LocalTime() in PostgreSQL

In PostgreSQL, il localtime La funzione restituisce l'ora locale del giorno, senza l'offset del fuso orario.

Se hai bisogno dell'offset del fuso orario, usa current_time() invece.

Sintassi

Puoi usarlo in uno dei seguenti modi:

localtime
localtime(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 localtime;

Risultato:

15:50:25.314626

Esempio – Precisione specifica

Ecco un esempio per dimostrare come specificare la precisione.

SELECT localtime(0);

Risultato:

15:50:44

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 localtime(3);

Risultato:

15:50:59.039

Transazioni

L'ora effettiva 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 localtime;
SELECT pg_sleep(5);
SELECT localtime;
SELECT pg_sleep(5);
SELECT localtime;
COMMIT;

Ecco l'output completo del mio terminale durante l'esecuzione di quella transazione in 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

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 
  localtime,
  pg_sleep(5),
  localtime,
  pg_sleep(5),
  localtime;

Risultato (usando l'output verticale):

localtime | 09:23:45.108559
pg_sleep  | 
localtime | 09:23:45.108559
pg_sleep  | 
localtime | 09:23:45.108559

Tutti e tre i valori temporali sono identici, anche se pg_sleep() è stata utilizzata per ritardare l'esecuzione tra ogni chiamata a localtime .

Questo è in contrasto con clock_timestamp() funzione, che fa cambia man mano che avanza nell'istruzione.

A proposito, ho usato 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 .