PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak działa pg_sleep_until() w PostgreSQL

W PostgreSQL możesz użyć pg_sleep_until() funkcja opóźniająca wykonanie do określonego znacznika czasu.

Jest to przydatne, gdy wymagany jest określony czas budzenia.

Zwróć uwagę, że pg_sleep_until nie gwarantuje, że obudzi się dokładnie o określonej godzinie, ale nie obudzi się wcześniej.

Składnia

Składnia wygląda tak:

pg_sleep_until(timestamp with time zone)

Przykład

Oto przykład demonstrujący jego użycie.

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

Wynik (przy użyciu wyjścia pionowego):

clock_timestamp | 2020-06-28 15:29:54.564608+10
pg_sleep_until  |
clock_timestamp | 2020-06-28 15:30:00.0119+10

Użyłem clock_timestamp() w tym przykładzie, ponieważ zmienia się podczas wykonywania instrukcji. Dzięki temu możemy zobaczyć zaktualizowane wartości w miarę postępów w instrukcji.

Użyłem rozszerzonego wyświetlania (czasami określanego jako „wyjście pionowe”) w tym przykładzie, aby ułatwić zobaczenie wyniku.

Możesz przełączać rozszerzone wyświetlanie w psql za pomocą \x .

Przykład 2

Oto kolejny przykład, tym razem z dodatkowym wywołaniem pg_sleep_until() i clock_timestamp() .

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

Wynik (przy użyciu wyjścia pionowego):

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

Przykład 3

W tym przykładzie wyraźnie określam datę/godzinę i przesunięcie strefy czasowej.

Ponadto uruchamiam zapytanie po upływie pierwszego znacznika czasu. Dlatego działa natychmiast.

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

Wynik (przy użyciu wyjścia pionowego):

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

Jak pokazuje wynik, nie zacząłem wykonywać zapytania do 17 sekund po pierwszej pg_sleep_until() wartość, więc uruchomił się natychmiast i użył sygnatury czasowej w momencie uruchomienia.

W tych przykładach wszystkie moje znaczniki czasu pojawiały się szybko po sobie, ponieważ nie chciałem czekać godzinami lub dniami tylko na aktualizację tego artykułu. Ale możesz śmiało określić inną datę, jeśli jest to wymagane.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migracja z DB2 do PostgreSQL — co powinieneś wiedzieć

  2. Jak rejestrować zapytania PostgreSQL?

  3. Moje ulubione rozszerzenia PostgreSQL — część druga

  4. PostgreSQL 9.1:Jak łączyć wiersze w tablicy bez duplikatów, DOŁĄCZ do innej tabeli

  5. Praskie spotkanie PostgreSQL