In PostgreSQL kunt u de pg_sleep()
functie om de uitvoering een bepaald aantal seconden uit te stellen.
Het maakt het proces van de huidige sessie in de slaapstand totdat het opgegeven aantal seconden is verstreken. Het werkt vergelijkbaar met MySQL's sleep()
functie, en ook TSQL's waitfor
statement in SQL Server.
De pg_sleep()
functie accepteert een dubbele precisie argument, zodat u ook vertragingen van een fractie van een seconde kunt opgeven.
De slaapvertraging is minstens zolang aangegeven. Het kan echter langer zijn, afhankelijk van factoren zoals serverbelasting en de effectieve resolutie van het slaapinterval van uw platform.
Syntaxis
De syntaxis is vrij eenvoudig:
pg_sleep(seconds)
Waar seconds
is een dubbele precisie waarde die aangeeft hoeveel seconden/fractionele seconden er moeten verstrijken voordat het proces wordt voortgezet.
Voorbeeld
Hier is een voorbeeld om het gebruik te demonstreren.
\x
SELECT
clock_timestamp(),
pg_sleep(1),
clock_timestamp(),
pg_sleep(1),
clock_timestamp();
Resultaat (met verticale uitvoer):
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
Ik gebruikte clock_timestamp()
in dit voorbeeld, omdat het verandert tijdens de uitvoering van de instructie. Hierdoor kunnen we de bijgewerkte waarden zien naarmate het statement vordert.
Ik heb in dit voorbeeld een uitgebreide weergave gebruikt (soms "verticale uitvoer" genoemd) om het resultaat gemakkelijker te kunnen zien.
U kunt de uitgebreide weergave in psql schakelen met \x
.
Fractionele seconden
Zoals vermeld, kunt u indien nodig vertragingen van een fractie van een seconde opgeven.
SELECT
clock_timestamp(),
pg_sleep(.5),
clock_timestamp(),
pg_sleep(.5),
clock_timestamp();
Resultaat (met verticale uitvoer):
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
Negatieve waarden
Negatieve waarden leiden niet tot vertraging in de uitvoering.
SELECT
clock_timestamp(),
pg_sleep(-1),
clock_timestamp(),
pg_sleep(-1),
clock_timestamp();
Resultaat (met verticale uitvoer):
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