Postgres - лимит процедуры, выполняемой за сеанс - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть сценарий, в котором у меня есть процедура предварительного приготовления по дате.Если данные за эту дату приготовлены, просто верните их, иначе процедура будет готовить их.

И проблема в том, что если процесс приготовления занимает слишком много времени, существует вероятность дублирования данных.

Я ожидал бы, что этот рабочий процесс:

  1. Пользователь A открывает сеанс из веб-приложения и запрашивает данные за 2018-июнь, процедура под названием proc_A будетпроверьте данные за этот месяц и приготовьте их, если они еще не существуют.

  2. Пользователь B открывает другой сеанс из настольного приложения и запрашивает те же данные за 2018-июнь, затем онидолжно появиться сообщение о том, что данные готовятся, пожалуйста, подождите.

Можно ли добиться этого, только внося изменения в базу данных PostgreSQL, а не внося изменения в веб-приложение идесктоп-приложение?

1 Ответ

0 голосов
/ 27 сентября 2018

Я бы добавил столбец состояния в таблицу данных:

ready boolean DEFAULT FALSE

Рабочий процесс будет следующим:

INSERT INTO data (month, value, ready)
   VALUES (date_trunc('month', current_timestamp)::date, NULL, FALSE)
ON CONFLICT (month) DO NOTHING;

Если строка вставлена, переходите к обработке значения, затем запустите

UPDATE data SET
   value = 42, ready = TRUE
WHERE month = date_trunc('month', current_date)::date;

Если первая инструкция не вставит ни одной строки, запустите

SELECT value, ready
FROM data
WHERE month = date_trunc('month', current_date)::date;

Если ready истинно, верните данные, если нет, сообщите клиентупожалуйста подождите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...