sql >> Database >  >> RDS >> PostgreSQL

Hoe pg_sleep_until() werkt in PostgreSQL

In PostgreSQL kunt u de pg_sleep_until() functie om de uitvoering uit te stellen tot een opgegeven tijdstempel.

Dit is handig wanneer een specifieke wektijd gewenst is.

Merk op dat pg_sleep_until wordt niet gegarandeerd precies op de opgegeven tijd wakker, maar het zal niet eerder wakker worden.

Syntaxis

De syntaxis gaat als volgt:

pg_sleep_until(timestamp with time zone)

Voorbeeld

Hier is een voorbeeld om het gebruik te demonstreren.

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

Resultaat (met verticale uitvoer):

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

Voorbeeld 2

Hier is nog een voorbeeld, dit keer met een extra aanroep naar pg_sleep_until() en clock_timestamp() .

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

Resultaat (met verticale uitvoer):

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

Voorbeeld 3

In dit voorbeeld specificeer ik expliciet de datum/tijd en tijdzone-offset.

Ook voer ik de query uit nadat de eerste tijdstempel is verstreken. Daarom draait het direct.

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();

Resultaat (met verticale uitvoer):

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

Zoals het resultaat laat zien, begon ik de query pas 17 seconden na de eerste pg_sleep_until() uit te voeren waarde, en dus liep het onmiddellijk en gebruikte het de tijdstempel op het moment dat het liep.

Mijn tijdstempels waren allemaal snel achter elkaar in deze voorbeelden, omdat ik geen uren of dagen wilde wachten om dit artikel bij te werken. Maar u kunt indien nodig doorgaan en een andere datum opgeven.


  1. Verbindingsbeheer in PostgreSQL:een gids

  2. Converteer 'smalldatetime' naar 'datetimeoffset' in SQL Server (T-SQL-voorbeelden)

  3. Vind rijen met meerdere dubbele velden met Active Record, Rails &Postgres

  4. Een gemeenschappelijke MS SQL Server-prestatie-indicator implementeren