En PostgreSQL, puede usar pg_sleep()
función para retrasar la ejecución durante un número determinado de segundos.
Hace que el proceso de la sesión actual duerma hasta que haya transcurrido el número especificado de segundos. Funciona de forma similar a sleep()
de MySQL. función, y también waitfor
de TSQL declaración en SQL Server.
El pg_sleep()
la función acepta una doble precisión argumento, por lo que también puede especificar retrasos de fracciones de segundo.
El retraso del sueño será al menos siempre que se especifique. Sin embargo, podría ser más largo dependiendo de factores como la carga del servidor, así como la resolución efectiva del intervalo de suspensión de su plataforma.
Sintaxis
La sintaxis es bastante simple:
pg_sleep(seconds)
Donde seconds
es una doble precisión valor que especifica cuántos segundos/fracciones de segundo deben pasar antes de que continúe el proceso.
Ejemplo
Aquí hay un ejemplo para demostrar su uso.
\x
SELECT
clock_timestamp(),
pg_sleep(1),
clock_timestamp(),
pg_sleep(1),
clock_timestamp();
Resultado (usando salida vertical):
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
Usé clock_timestamp()
en este ejemplo, porque cambia durante la ejecución de la instrucción. Esto nos permite ver los valores actualizados a medida que avanza la declaración.
Usé la visualización expandida (a veces denominada "salida vertical") en este ejemplo para que sea más fácil ver el resultado.
Puede alternar la visualización expandida en psql usando \x
.
Segundos fraccionarios
Como se mencionó, puede especificar retrasos de fracciones de segundo si es necesario.
SELECT
clock_timestamp(),
pg_sleep(.5),
clock_timestamp(),
pg_sleep(.5),
clock_timestamp();
Resultado (usando salida vertical):
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
Valores negativos
Los valores negativos no provocarán ningún retraso en la ejecución.
SELECT
clock_timestamp(),
pg_sleep(-1),
clock_timestamp(),
pg_sleep(-1),
clock_timestamp();
Resultado (usando salida vertical):
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