обновление не разрешено в энергонезависимой функции postgres - PullRequest
0 голосов
/ 22 января 2020

Я пытался использовать курсор с несколькими параметрами, функция была создана без проблем, но затем, когда я вызываю свою функцию, используя

select scratchpad.update_status()

, я получаю следующую ошибку:

обновление не разрешено в энергонезависимой функции

функция:

create  function scrat.update_status() returns void
as
$$
DECLARE
  day_to_process record;

BEGIN
FOR  day_to_process   in  (SELECT distinct inst_status.date,inst_status.code,scrat.inst_status.id
                             FROM scrat.inst_status
                             WHERE inst_status.status ='S'
                             ORDER BY 1)
  LOOP
    raise notice 'Processing Date %', day_to_process.date::text;
   update scrat.inst_status
    set status = (select a.status from
                                  (select status, max(date)
                                FROM scrat.inst_status
                                where status <> 'S'
                                  and date::date < day_to_process.date
                                group by status
                                order by 2 desc
                                limit 1)a)
    where inst_status.date = day_to_process.date
      and id =day_to_process.id
      and code=day_to_process.code;
  END LOOP;
END ;
$$ LANGUAGE plpgsql STABLE;

1 Ответ

1 голос
/ 22 января 2020

Как документация гласит:

STABLE указывает, что функция не может изменить базу данных и что при сканировании одной таблицы она будет последовательно возвращать один и тот же результат для те же значения аргумента, но его результат может меняться в операторах SQL.

Так что вам придется пометить функцию как VOLATILE.

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