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

Come funziona LocalTimeStamp() in PostgreSQL

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 .