sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo pausar la ejecución de una instrucción en PostgreSQL

PostgreSQL incluye tres funciones que le permiten retrasar la ejecución del proceso del servidor. la ejecución de una sentencia.

En otras palabras, puede ejecutar una declaración y hacer que se detenga a la mitad, antes de continuar con su camino alegre.

Las tres funciones son:

  • pg_sleep()
  • pg_sleep_for()
  • pg_sleep_until()

Todos estos son muy similares, pero funcionan de formas ligeramente diferentes.

A continuación se muestran ejemplos de cada uno.

Ejemplo:pg_sleep()

El pg_sleep() La función hace que el proceso de la sesión actual duerma hasta que haya pasado una cantidad específica de segundos.

Especifique los segundos como un argumento. El argumento es un valor de doble precisión , por lo que puede proporcionar fracciones de segundo si es necesario.

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

Resultado (usando salida vertical):

clock_timestamp | 2020-06-28 16:18:25.645814+10
pg_sleep        |
clock_timestamp | 2020-06-28 16:18:26.706998+10
pg_sleep        |
clock_timestamp | 2020-06-28 16:18:27.768604+10

Ejemplo:pg_sleep_for()

El pg_sleep_for() La función es una función conveniente para tiempos de sueño más largos especificados como un intervalo.

SELECT 
  clock_timestamp(),
  pg_sleep_for('2 minutes 10 seconds'),
  clock_timestamp(),
  pg_sleep_for('1 minute 5 seconds'),
  clock_timestamp();

Resultado (usando salida vertical):

clock_timestamp | 2020-06-28 16:20:04.218295+10
pg_sleep_for    |
clock_timestamp | 2020-06-28 16:22:14.222907+10
pg_sleep_for    |
clock_timestamp | 2020-06-28 16:23:19.294483+10

Ejemplo:pg_sleep_until()

El pg_sleep_until() es una función de conveniencia función de conveniencia para cuando se desea despertarse a una hora específica.

SELECT 
  clock_timestamp(),
  pg_sleep_until('today 16:25:15.1234'),
  clock_timestamp();

Resultado (usando salida vertical):

clock_timestamp | 2020-06-28 16:24:28.900319+10
pg_sleep_until  |
clock_timestamp | 2020-06-28 16:25:15.184042+10

Precisión del Retraso

Al usar estas funciones, el tiempo de demora real puede variar del tiempo especificado según el nivel de actividad del servidor. Sin embargo, el retraso del sueño será al menos tan largo como se especifica.

En particular, pg_sleep_until no se garantiza que se despierte exactamente a la hora especificada, pero no se despertará antes.