PostgreSQL zawiera trzy funkcje, które pozwalają opóźnić wykonanie procesu serwera. wykonanie oświadczenia.
Innymi słowy, możesz uruchomić oświadczenie i zatrzymać je w połowie, zanim przejdziesz dalej.
Te trzy funkcje to:
pg_sleep()
pg_sleep_for()
pg_sleep_until()
Wszystkie są bardzo podobne, ale działają w nieco inny sposób.
Poniżej znajdują się przykłady każdego z nich.
Przykład – pg_sleep()
pg_sleep()
funkcja uśpi proces bieżącej sesji, dopóki nie minie określona liczba sekund.
Określasz sekundy jako argument. Argument jest wartością podwójnej precyzji , więc w razie potrzeby możesz podać ułamki sekund.
\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 16:18:25.645814+10 pg_sleep | clock_timestamp | 2020-06-28 16:18:26.706998+10 pg_sleep | clock_timestamp | 2020-06-28 16:18:27.768604+10
Przykład – pg_sleep_for()
pg_sleep_for()
funkcja jest wygodną funkcją dla dłuższych czasów snu określonych jako interwał.
SELECT
clock_timestamp(),
pg_sleep_for('2 minutes 10 seconds'),
clock_timestamp(),
pg_sleep_for('1 minute 5 seconds'),
clock_timestamp();
Wynik (przy użyciu wyjścia pionowego):
clock_timestamp | 2020-06-28 16:20:04.218295+10 pg_sleep_for | clock_timestamp | 2020-06-28 16:22:14.222907+10 pg_sleep_for | clock_timestamp | 2020-06-28 16:23:19.294483+10
Przykład – pg_sleep_until()
pg_sleep_until()
funkcja jest funkcją wygodną, funkcją wygodną, gdy wymagany jest określony czas budzenia.
SELECT
clock_timestamp(),
pg_sleep_until('today 16:25:15.1234'),
clock_timestamp();
Wynik (przy użyciu wyjścia pionowego):
clock_timestamp | 2020-06-28 16:24:28.900319+10 pg_sleep_until | clock_timestamp | 2020-06-28 16:25:15.184042+10
Precyzja opóźnienia
Podczas korzystania z tych funkcji rzeczywiste opóźnienie może różnić się od czasu określonego w zależności od poziomu aktywności serwera. Jednak opóźnienie uśpienia będzie co najmniej tak długie, jak określono.
W szczególności pg_sleep_until
nie gwarantuje, że obudzi się dokładnie o określonej godzinie, ale nie obudzi się wcześniej.