Выполнение запросов раз в пять секунд
Пробовал через pg_cron, но он не позволяет выбрать интервал менее одной минуты. Сейчас смотрю в сторону pg_sleep, но проблема с синтаксисом. Скрипт имеет следующую структуру:
Прошу прощения! Так называемая петля есть. Корректный запрос:
CREATE OR REPLACE FUNCTION insert_dat() RETURNS VOID AS $$
BEGIN
INSERT INTO data (time, value)
VALUES (NOW(), random()*10);
SELECT pg_sleep(5);
INSERT INTO data (time, value)
VALUES (NOW(), random()*10);
SELECT pg_sleep(5);
INSERT INTO data (time, value)
VALUES (NOW(), random()*10);
SELECT pg_sleep(5);
INSERT INTO data (time, value)
VALUES (NOW(), random()*10);
SELECT pg_sleep(5);
INSERT INTO data (time, value)
VALUES (NOW(), random()*10);
SELECT pg_sleep(5);
INSERT INTO data (time, value)
VALUES (NOW(), random()*10);
SELECT pg_sleep(5);
INSERT INTO data (time, value)
VALUES (NOW(), random()*10);
SELECT pg_sleep(5);
INSERT INTO data (time, value)
VALUES (NOW(), random()*10);
SELECT pg_sleep(5);
INSERT INTO data (time, value)
VALUES (NOW(), random()*10);
SELECT pg_sleep(5);
INSERT INTO data (time, value)
VALUES (NOW(), random()*10);
SELECT pg_sleep(5);
INSERT INTO data (time, value)
VALUES (NOW(), random()*10);
SELECT pg_sleep(5);
INSERT INTO data (time, value)
VALUES (NOW(), random()*10);
SELECT pg_sleep(5);
END;
$$ LANGUAGE plpgsql;
-----------
Ошибка:
ERROR: query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT: PL/pgSQL function insert_dat() line 5 at SQL statement
SQL state: 42601
При вызове данной процедуры получаю ошибку... В чём может быть проблема?
Суть задачи наполнять таблицу каждые 5 секунд... Планирую сделать таким образом петлю минутную, а после этого через pg_cron запускать каждую минуту.
Ответы (1 шт):
Вместо
SELECT pg_sleep(5);
Напишите:
PERFORM pg_sleep(5);
Ошибка потому, что движок не понимает, зачем вы делаете SELECT, если не используете результат. Там в ошибке всё это прямо написано:
ERROR: query has no destination for result data
Ошибка: Не указано назначение для результирующих данных запроса.
HINT: If you want to discard the results of a
SELECT, usePERFORMinstead.
Подсказка: Если вы не хотите использовать результаты SELECT, используйте PERFORM вместо него.