PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment suspendre l'exécution d'une instruction dans PostgreSQL

PostgreSQL inclut trois fonctions qui vous permettent de retarder l'exécution du processus serveur. l'exécution d'une déclaration.

En d'autres termes, vous pouvez exécuter une instruction et la faire s'arrêter à mi-parcours, avant de poursuivre son petit bonhomme de chemin.

Les trois fonctions sont :

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

Ils sont tous très similaires, mais ils fonctionnent de manière légèrement différente.

Vous trouverez ci-dessous des exemples de chacun.

Exemple – pg_sleep()

Le pg_sleep() fait dormir le processus de la session en cours jusqu'à ce qu'un nombre spécifié de secondes se soit écoulé.

Vous spécifiez les secondes comme argument. L'argument est une valeur de double précision , afin que vous puissiez fournir des fractions de secondes si nécessaire.

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

Résultat (en utilisant la sortie verticale) :

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

Exemple :pg_sleep_for()

Le pg_sleep_for() est une fonction pratique pour des temps de sommeil plus longs spécifiés sous forme d'intervalle.

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

Résultat (en utilisant la sortie verticale) :

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

Exemple :pg_sleep_until()

Le pg_sleep_until() fonction est une fonction pratique fonction pratique lorsqu'une heure de réveil spécifique est souhaitée.

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

Résultat (en utilisant la sortie verticale) :

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

Précision du délai

Lors de l'utilisation de ces fonctions, le délai réel peut différer de l'heure spécifiée en fonction du niveau d'activité du serveur. Cependant, le délai de veille sera au moins aussi long que spécifié.

En particulier, pg_sleep_until n'est pas garanti de se réveiller exactement à l'heure spécifiée, mais il ne se réveillera pas plus tôt.