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