Как предотвратить рекурсивное выполнение триггера? Допустим, я хочу построить «древовидное» описание в плане счетов. Итак, что я делаю, когда новая запись вставляется / обновляется, я обновляю родительскую запись down_qty
, так что это будет запускать триггер обновления рекурсивно.
Прямо сейчас мой код в порядке - я поместил это в UPDATE
первую строку триггера:
-- prevents recursive trigger
if new.track_recursive_trigger <> old.track_recursive_trigger then
return new;
end if;
И это пример кода из моего триггера, когда мне нужно обновить количество родительской записи:
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
на account_category
'. s предыдущий родитель account_category
. Хотя я думаю, что это возможно, я не позволяю PostgreSQL выполнять рекурсивный триггер. Я использовал MSSQL раньше, когда уровень рекурсивной глубины триггера ограничен только 16
уровнями.