PostgreSQL включва три функции, които ви позволяват да забавите изпълнението на сървърния процес. изпълнението на изявление.
С други думи, можете да изпълните изявление и да го поставите на пауза до половината, преди да продължите по веселия си път.
Трите функции са:
pg_sleep()
pg_sleep_for()
pg_sleep_until()
Всички те са много сходни, но работят по малко различни начини.
По-долу са дадени примери за всеки един от тях.
Пример – pg_sleep()
pg_sleep()
функцията прави процеса на текущата сесия в спящ режим, докато измине определен брой секунди.
Вие посочвате секундите като аргумент. Аргументът е стойност с двойна точност , така че можете да предоставите частични секунди, ако е необходимо.
\x
SELECT
clock_timestamp(),
pg_sleep(1),
clock_timestamp(),
pg_sleep(1),
clock_timestamp();
Резултат (с помощта на вертикален изход):
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
Пример – pg_sleep_for()
pg_sleep_for()
функцията е удобна функция за по-големи времена на заспиване, посочени като интервал.
SELECT
clock_timestamp(),
pg_sleep_for('2 minutes 10 seconds'),
clock_timestamp(),
pg_sleep_for('1 minute 5 seconds'),
clock_timestamp();
Резултат (с помощта на вертикален изход):
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
Пример – pg_sleep_until()
pg_sleep_until()
функцията е удобна функция, удобна функция за това, когато се желае конкретно време за събуждане.
SELECT
clock_timestamp(),
pg_sleep_until('today 16:25:15.1234'),
clock_timestamp();
Резултат (с помощта на вертикален изход):
clock_timestamp | 2020-06-28 16:24:28.900319+10 pg_sleep_until | clock_timestamp | 2020-06-28 16:25:15.184042+10
Прецизност на закъснението
Когато използвате тези функции, действителното време закъснение може да варира от определеното време в зависимост от нивото на активност на сървъра. Въпреки това забавянето на заспиването ще бъде поне толкова дълго, колкото е посочено.
По-специално, pg_sleep_until
не е гарантирано, че ще се събуди точно в определеното време, но няма да се събуди по-рано.