PostgreSQL innehåller tre funktioner som låter dig fördröja exekveringen av serverprocessen. verkställandet av ett uttalande.
Med andra ord kan du köra ett uttalande och få det att pausa halvvägs innan du fortsätter på sin glada väg.
De tre funktionerna är:
pg_sleep()
pg_sleep_for()
pg_sleep_until()
Dessa är alla väldigt lika, men de fungerar på lite olika sätt.
Nedan finns exempel på var och en.
Exempel – pg_sleep()
pg_sleep()
funktionen gör att den aktuella sessionens process vilar tills ett visst antal sekunder har gått.
Du anger sekunderna som ett argument. Argumentet är ett värde på dubbel precision , så att du kan ge bråkdelar av sekunder om det behövs.
\x
SELECT
clock_timestamp(),
pg_sleep(1),
clock_timestamp(),
pg_sleep(1),
clock_timestamp();
Resultat (med vertikal utdata):
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
Exempel – pg_sleep_for()
pg_sleep_for()
funktion är en bekvämlighetsfunktion för längre sömntider som anges som ett intervall.
SELECT
clock_timestamp(),
pg_sleep_for('2 minutes 10 seconds'),
clock_timestamp(),
pg_sleep_for('1 minute 5 seconds'),
clock_timestamp();
Resultat (med vertikal utdata):
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
Exempel – pg_sleep_until()
pg_sleep_until()
funktion är en bekvämlighetsfunktion bekvämlighetsfunktion för när en specifik väckningstid önskas.
SELECT
clock_timestamp(),
pg_sleep_until('today 16:25:15.1234'),
clock_timestamp();
Resultat (med vertikal utdata):
clock_timestamp | 2020-06-28 16:24:28.900319+10 pg_sleep_until | clock_timestamp | 2020-06-28 16:25:15.184042+10
Fördröjningens precision
När du använder dessa funktioner kan den faktiska tidsfördröjningen variera från den angivna tiden beroende på aktivitetsnivån på servern. Sömnfördröjningen kommer dock att vara minst så lång som specificerats.
I synnerhet pg_sleep_until
är inte garanterat att vakna exakt vid den angivna tiden, men den kommer inte att vakna tidigare.