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

Comment pg_sleep() fonctionne dans PostgreSQL

Dans PostgreSQL, vous pouvez utiliser le pg_sleep() fonction pour retarder l'exécution d'un nombre de secondes donné.

Il fait dormir le processus de la session en cours jusqu'à ce que le nombre de secondes spécifié se soit écoulé. Cela fonctionne de la même manière que sleep() de MySQL fonction, ainsi que waitfor de TSQL déclaration dans SQL Server.

Le pg_sleep() la fonction accepte une double précision argument, vous pouvez donc également spécifier des délais d'une fraction de seconde.

Le délai de veille sera au moins aussi longtemps que spécifié. Cependant, il peut être plus long en fonction de facteurs tels que la charge du serveur, ainsi que la résolution effective de l'intervalle de veille de votre plate-forme.

Syntaxe

La syntaxe est assez simple :

pg_sleep(seconds)

seconds est une double précision valeur qui spécifie combien de secondes/fractions de secondes doivent s'écouler avant que le processus continue.

Exemple

Voici un exemple pour démontrer son utilisation.

\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 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

J'ai utilisé clock_timestamp() dans cet exemple, car il change pendant l'exécution de l'instruction. Cela nous permet de voir les valeurs mises à jour au fur et à mesure que l'instruction progresse.

J'ai utilisé l'affichage étendu (parfois appelé "sortie verticale") dans cet exemple afin de faciliter la visualisation du résultat.

Vous pouvez basculer l'affichage étendu dans psql en utilisant \x .

Fraction de seconde

Comme mentionné, vous pouvez spécifier des délais d'une fraction de seconde si nécessaire.

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

Résultat (en utilisant la sortie 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

Valeurs négatives

Les valeurs négatives n'entraîneront aucun retard d'exécution.

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

Résultat (en utilisant la sortie 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