В PostgreSQL можете да използвате pg_sleep()
функция за забавяне на изпълнението за определен брой секунди.
Той кара процеса на текущата сесия да заспи, докато не изтече посоченият брой секунди. Работи подобно на sleep()
на MySQL функция, както и waitfor
на TSQL изявление в SQL Server.
pg_sleep()
функцията приема двойна точност аргумент, така че можете да зададете и закъснения с част от секундата.
Забавянето на съня ще бъде най-малко стига да е посочено. Въпреки това, може да е по-дълго в зависимост от фактори като натоварване на сървъра, както и ефективната резолюция на вашата платформа на интервала на заспиване.
Синтаксис
Синтаксисът е доста прост:
pg_sleep(seconds)
Където seconds
е сдвойна точност стойност, която определя колко секунди/частични секунди трябва да минат, преди процесът да продължи.
Пример
Ето пример за демонстриране на използването му.
\x
SELECT
clock_timestamp(),
pg_sleep(1),
clock_timestamp(),
pg_sleep(1),
clock_timestamp();
Резултат (с помощта на вертикален изход):
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
Използвах clock_timestamp()
в този пример, защото се променя по време на изпълнение на оператор. Това ни позволява да видим актуализираните стойности с напредването на изявлението.
Използвах разширен дисплей (понякога наричан „вертикален изход“) в този пример, за да улесня виждането на резултата.
Можете да превключвате разширеното показване в psql, като използвате \x
.
Дробни секунди
Както споменахме, можете да посочите закъснения с част от секундата, ако е необходимо.
SELECT
clock_timestamp(),
pg_sleep(.5),
clock_timestamp(),
pg_sleep(.5),
clock_timestamp();
Резултат (с помощта на вертикален изход):
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
Отрицателни стойности
Отрицателните стойности няма да доведат до забавяне на изпълнението.
SELECT
clock_timestamp(),
pg_sleep(-1),
clock_timestamp(),
pg_sleep(-1),
clock_timestamp();
Резултат (с помощта на вертикален изход):
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