Как предотвратить рекурсивное выполнение триггера? Предположим, что я хочу построить описание "tree-able" на графике учетной записи. Итак, что я делаю, когда новая запись вставлена /обновлена, я обновляю родительскую запись down_qty
, поэтому это приведет к рекурсивному запуску запуска обновления.
Прямо сейчас, мой код в порядке - я помещаю это в первую строку триггера UPDATE
:
-- prevents recursive trigger
if new.track_recursive_trigger <> old.track_recursive_trigger then
return new;
end if;
И это пример кода из моего триггера, когда мне нужно обновить родительскую запись qty:
update account_category set
track_recursive_trigger = track_recursive_trigger + 1, -- i put this line to prevent recursive trigger
down_qty = down_qty - (old.down_qty + 1)
where account_category_id = m_parent_account;
Я думаю, если есть способ в PostgreSQL обнаружить рекурсивный триггер без введения нового поля, что-то похожее на MSSQL trigger_nestlevel
.
[EDIT]
Я петлю внутри дерева, мне нужно поднять down_qty
каждого account_category
обратно в свой корень. Например, я вставляю новую категорию учетных записей, она должна увеличивать down_qty
своего родителя account_category
, аналогично, когда я изменяю родительский элемент категории account_category
, мне нужно уменьшить down_qty
of account_category
previous parent account_category
. Хотя я думаю, что это возможно, я не позволяю PostgreSQL делать рекурсивный триггер. Я использовал MSSQL до того момента, когда уровень рекурсивной глубины триггера ограничен только до уровней 16
.