I PostgreSQL kan du bruge pg_sleep_until()
funktion til at forsinke eksekveringen indtil et angivet tidsstempel.
Dette er nyttigt, når der ønskes et bestemt vækketidspunkt.
Bemærk, at pg_sleep_until
er ikke garanteret at vågne præcist på det angivne tidspunkt, men det vil ikke vågne tidligere.
Syntaks
Syntaksen ser sådan ud:
pg_sleep_until(timestamp with time zone)
Eksempel
Her er et eksempel for at demonstrere dets brug.
\x
SELECT
clock_timestamp(),
pg_sleep_until('today 15:30'),
clock_timestamp();
Resultat (ved hjælp af lodret output):
clock_timestamp | 2020-06-28 15:29:54.564608+10 pg_sleep_until | clock_timestamp | 2020-06-28 15:30:00.0119+10
Jeg brugte clock_timestamp()
i dette eksempel, fordi det ændres under udførelse af sætningen. Dette giver os mulighed for at se de opdaterede værdier, efterhånden som erklæringen skrider frem.
Jeg brugte udvidet display (nogle gange omtalt som "lodret output") i dette eksempel for at gøre det nemmere at se resultatet.
Du kan skifte udvidet visning i psql ved at bruge \x
.
Eksempel 2
Her er endnu et eksempel, denne gang med et ekstra kald til pg_sleep_until()
og clock_timestamp()
.
SELECT
clock_timestamp(),
pg_sleep_until('today 15:32'),
clock_timestamp(),
pg_sleep_until('today 15:33'),
clock_timestamp();
Resultat (ved hjælp af lodret output):
clock_timestamp | 2020-06-28 15:31:23.142358+10 pg_sleep_until | clock_timestamp | 2020-06-28 15:32:00.061566+10 pg_sleep_until | clock_timestamp | 2020-06-28 15:33:00.074381+10
Eksempel 3
I dette eksempel angiver jeg eksplicit dato/tid og tidszoneforskydning.
Jeg kører også forespørgslen efter det første tidsstempel er passeret. Derfor kører den med det samme.
SELECT
clock_timestamp(),
pg_sleep_until('2020-06-29 08:54:00.000000+10'),
clock_timestamp(),
pg_sleep_until('2020-06-29 08:55:00.000000+10'),
clock_timestamp();
Resultat (ved hjælp af lodret output):
clock_timestamp | 2020-06-29 08:54:17.189189+10 pg_sleep_until | clock_timestamp | 2020-06-29 08:54:17.189196+10 pg_sleep_until | clock_timestamp | 2020-06-29 08:55:00.062783+10
Som resultatet viser, begyndte jeg ikke at køre forespørgslen før 17 sekunder efter den første pg_sleep_until()
værdi, og det kørte med det samme og brugte tidsstemplet på det tidspunkt, det kørte.
Mine tidsstempler var alle i hurtig rækkefølge i disse eksempler, fordi jeg ikke ønskede at vente timer eller dage bare for at opdatere denne artikel. Men du kan gå videre og angive en anden dato, hvis det kræves.