sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur pg_sleep_until() fungerar i PostgreSQL

I PostgreSQL kan du använda pg_sleep_until() funktion för att fördröja exekvering tills en specificerad tidsstämpel.

Detta är användbart när en specifik väckningstid önskas.

Observera att pg_sleep_until är inte garanterat att vakna exakt vid den angivna tiden, men den kommer inte att vakna tidigare.

Syntax

Syntaxen ser ut så här:

pg_sleep_until(timestamp with time zone)

Exempel

Här är ett exempel för att demonstrera dess användning.

\x
SELECT 
  clock_timestamp(),
  pg_sleep_until('today 15:30'),
  clock_timestamp();

Resultat (med vertikal utdata):

clock_timestamp | 2020-06-28 15:29:54.564608+10
pg_sleep_until  |
clock_timestamp | 2020-06-28 15:30:00.0119+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 .

Exempel 2

Här är ett annat exempel, den här gången med ett extra anrop till pg_sleep_until() och clock_timestamp() .

SELECT 
  clock_timestamp(),
  pg_sleep_until('today 15:32'),
  clock_timestamp(),
  pg_sleep_until('today 15:33'),
  clock_timestamp();

Resultat (med vertikal utdata):

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

Exempel 3

I det här exemplet anger jag explicit datum/tid och tidszonsförskjutning.

Jag kör också frågan efter att den första tidsstämpeln har passerat. Därför går den omedelbart.

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 (med vertikal utdata):

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 visar började jag inte köra frågan förrän 17 sekunder efter den första pg_sleep_until() värde, och så kördes den omedelbart och använde tidsstämpeln när den kördes.

Mina tidsstämplar var alla i snabb följd i dessa exempel, eftersom jag inte ville vänta timmar eller dagar bara för att uppdatera den här artikeln. Men du kan gå vidare och ange ett annat datum om det behövs.


  1. Konvertera från Oracles RAW(16) till .NET:s GUID

  2. Microsoft Access Table Tips – Tricks och riktlinjer del 2

  3. Akta dig för vilseledande data från SET STATISTICS IO

  4. EM 12c Justering av tröskelvärden