sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur pg_sleep() fungerar i PostgreSQL

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

  1. Oväntad Clustered Index Fragmentation

  2. Hur trunkerar man en tabell med begränsad främmande nyckel?

  3. SQLT i 12c kan inte samla in statistik

  4. Databasmodell för en trafikskolas bokningssystem. Del 2