Поиск заданий для запуска через last_run и связанный интервал в том же запросе - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь написать какое-нибудь cron-подобное программное обеспечение. Я использую Postgres.

CREATE TABLE "public"."crons" (
  "uuid" text COLLATE "pg_catalog"."default" NOT NULL,
  "last_run" timestamp(6),
  "frequency" int4 NOT NULL DEFAULT 1,
)

last_run - это записанная метка времени, когда последнее задание было выполнено. frequency выражается в минутах и ​​может быть 1,5, как вы его называете.

Я хотел бы создать запрос, который выбирает следующие задания (строки) для выполнения на основе текущего времени из этой таблицы , но до сих пор я не могу узнать, как. Нужно ли добавлять last_run к частоте и проверять, прошла ли текущая отметка времени?

Есть ли указатели? Благодаря.

1 Ответ

2 голосов
/ 18 апреля 2020

Хммм, вы можете получить следующий запуск и заказать их:

select c.*
from crons c
order by c.last_run + c.frequency * interval '1 minute'

Если вы хотите, чтобы те, которые еще не запускались, но должны иметь:

select c.*
from crons c
where c.last_run + c.frequency * interval '1 minute' < now();

Если вы хотите следующие прогоны, которые должны произойти, но еще не были:

select c.*
from crons c
where c.last_run + c.frequency * interval '1 minute' >= now()
order by c.last_run + c.frequency * interval '1 minute' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...