sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan pg_sleep_until() virker i PostgreSQL

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.


  1. Kortlægning af PostgreSQL seriel type med Hibernate-annoteringer

  2. SQL Server, hvordan indstilles automatisk stigning efter oprettelse af en tabel uden tab af data?

  3. Brug bundet parameter flere gange

  4. hvordan man bruger check constraint i oracle