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

Come funziona pg_sleep() in PostgreSQL

In PostgreSQL, puoi usare pg_sleep() funzione per ritardare l'esecuzione di un determinato numero di secondi.

Sospende il processo della sessione corrente fino allo scadere del numero di secondi specificato. Funziona in modo simile a sleep() di MySQL funzione, e anche waitfor di TSQL istruzione in SQL Server.

Il pg_sleep() la funzione accetta una doppia precisione argomento, quindi puoi anche specificare ritardi frazionari di secondo.

Il ritardo del sonno sarà almeno finchè specificato. Tuttavia, potrebbe essere più lungo a seconda di fattori quali il carico del server e l'effettiva risoluzione dell'intervallo di sospensione della piattaforma.

Sintassi

La sintassi è abbastanza semplice:

pg_sleep(seconds)

Dove seconds è una doppia precisione valore che specifica quanti secondi/frazioni di secondi devono trascorrere prima che il processo continui.

Esempio

Ecco un esempio per dimostrarne l'utilizzo.

\x
SELECT 
  clock_timestamp(),
  pg_sleep(1),
  clock_timestamp(),
  pg_sleep(1),
  clock_timestamp();

Risultato (usando l'output verticale):

clock_timestamp | 2020-06-28 13:46:53.808072+10
pg_sleep        |
clock_timestamp | 2020-06-28 13:46:54.870423+10
pg_sleep        |
clock_timestamp | 2020-06-28 13:46:55.938278+10

Ho usato clock_timestamp() in questo esempio, perché cambia durante l'esecuzione dell'istruzione. Questo ci permette di vedere i valori aggiornati man mano che l'istruzione avanza.

In questo esempio ho utilizzato il display espanso (a volte indicato come "output verticale") per rendere più semplice la visualizzazione del risultato.

Puoi attivare la visualizzazione espansa in psql usando \x .

Secondi frazionari

Come accennato, è possibile specificare ritardi di frazioni di secondo, se necessario.

SELECT 
  clock_timestamp(),
  pg_sleep(.5),
  clock_timestamp(),
  pg_sleep(.5),
  clock_timestamp();

Risultato (usando l'output verticale):

clock_timestamp | 2020-06-28 15:03:52.496211+10
pg_sleep        |
clock_timestamp | 2020-06-28 15:03:53.041063+10
pg_sleep        |
clock_timestamp | 2020-06-28 15:03:53.553291+10

Valori negativi

I valori negativi non comporteranno alcun ritardo nell'esecuzione.

SELECT 
  clock_timestamp(),
  pg_sleep(-1),
  clock_timestamp(),
  pg_sleep(-1),
  clock_timestamp();

Risultato (usando l'output verticale):

clock_timestamp | 2020-06-29 09:03:19.056681+10
pg_sleep        |
clock_timestamp | 2020-06-29 09:03:19.056682+10
pg_sleep        |
clock_timestamp | 2020-06-29 09:03:19.056683+10