I PostgreSQL kan du använda pg_sleep()
funktion för att fördröja exekvering under ett givet antal sekunder.
Det gör att den aktuella sessionens process vilar tills det angivna antalet sekunder har förflutit. Det fungerar på samma sätt som MySQL:s sleep()
funktion, och även TSQL:s waitfor
uttalande i SQL Server.
pg_sleep()
funktionen accepterar en dubbel precision argument, så att du också kan ange fördröjningar på bråkdelssekunder.
Sömnfördröjningen kommer att vara minst så länge som anges. Det kan dock vara längre beroende på faktorer som serverbelastning, såväl som din plattforms effektiva upplösning av vilointervallet.
Syntax
Syntaxen är ganska enkel:
pg_sleep(seconds)
Där seconds
är en dubbel precision värde som anger hur många sekunder/bråkdelar som måste gå innan processen fortsätter.
Exempel
Här är ett exempel för att demonstrera dess användning.
\x
SELECT
clock_timestamp(),
pg_sleep(1),
clock_timestamp(),
pg_sleep(1),
clock_timestamp();
Resultat (med vertikal utdata):
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
Jag använde clock_timestamp()
i det här exemplet, eftersom det ändras under körning av programsatsen. Detta gör att vi kan se de uppdaterade värdena allt eftersom uttalandet fortskrider.
Jag använde utökad display (ibland kallad "vertical output") i det här exemplet för att göra det lättare att se resultatet.
Du kan växla utökad visning i psql genom att använda \x
.
Bråkdelar av sekunder
Som nämnts kan du ange fördröjningar på bråkdelssekunder om det behövs.
SELECT
clock_timestamp(),
pg_sleep(.5),
clock_timestamp(),
pg_sleep(.5),
clock_timestamp();
Resultat (med vertikal utdata):
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
Negativa värden
Negativa värden kommer inte att resultera i någon fördröjning av exekvering.
SELECT
clock_timestamp(),
pg_sleep(-1),
clock_timestamp(),
pg_sleep(-1),
clock_timestamp();
Resultat (med vertikal utdata):
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