W PostgreSQL możesz użyć pg_sleep()
funkcja opóźnienia wykonania o określoną liczbę sekund.
Powoduje uśpienie procesu bieżącej sesji, aż upłynie określona liczba sekund. Działa podobnie do funkcji sleep()
w MySQL funkcja, a także waitfor
TSQL instrukcja w SQL Server.
pg_sleep()
funkcja akceptuje podwójną precyzję argumentu, dzięki czemu można również określić opóźnienia w ułamkach sekund.
Opóźnienie snu wyniesie co najmniej tak długo, jak określono. Może to jednak być dłuższe w zależności od takich czynników, jak obciążenie serwera, a także efektywna rozdzielczość interwału uśpienia Twojej platformy.
Składnia
Składnia jest dość prosta:
pg_sleep(seconds)
Gdzie seconds
to podwójna precyzja wartość określająca, ile sekund/ułamków sekund musi upłynąć, zanim proces będzie kontynuowany.
Przykład
Oto przykład demonstrujący jego użycie.
\x
SELECT
clock_timestamp(),
pg_sleep(1),
clock_timestamp(),
pg_sleep(1),
clock_timestamp();
Wynik (przy użyciu wyjścia pionowego):
clock_timestamp | 2020-06-28 13:46:53.808072+10 pg_sleep | clock_timestamp | 2020-06-28 13:46:54.870423+10 pg_sleep | clock_timestamp | 2020-06-28 13:46:55.938278+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
.
Sekundy ułamkowe
Jak wspomniano, w razie potrzeby możesz określić opóźnienia w ułamkach sekund.
SELECT
clock_timestamp(),
pg_sleep(.5),
clock_timestamp(),
pg_sleep(.5),
clock_timestamp();
Wynik (przy użyciu wyjścia pionowego):
clock_timestamp | 2020-06-28 15:03:52.496211+10 pg_sleep | clock_timestamp | 2020-06-28 15:03:53.041063+10 pg_sleep | clock_timestamp | 2020-06-28 15:03:53.553291+10
Wartości ujemne
Wartości ujemne nie spowodują opóźnienia wykonania.
SELECT
clock_timestamp(),
pg_sleep(-1),
clock_timestamp(),
pg_sleep(-1),
clock_timestamp();
Wynik (przy użyciu wyjścia pionowego):
clock_timestamp | 2020-06-29 09:03:19.056681+10 pg_sleep | clock_timestamp | 2020-06-29 09:03:19.056682+10 pg_sleep | clock_timestamp | 2020-06-29 09:03:19.056683+10