вызывает ==> Функция_2 ==> вызывает (в цикле несколько раз. обычно 2-4) ==> Функция_3 (изменяется Таблица_1) ==> Триггер_1 (AFTER INSERT/UPDATE/DELETE Таблица_1) содержит
REFRESH MATERIALIZED VIEW Представление_1 WITH DATA;
RETURN NEW;
Представление_1 - основано на двух таблицах - Таблица_1 и Таблица_2. Таблица_2 нигде в указанных функциях не изменяется.
При вызове Функция_1 возникает ошибка: нельзя выполнить REFRESH MATERIALIZED VIEW "Представление_1", так как этот объект используется активными запросами в данном сеансе.
При этом если вызвать Функция_3 (изменяется Таблица_1) - то все работает корректно и ничего не падает!
Как заставить триггер корректно работать?
Значит, представление_1 используется ранее в этой транзакции. См. src\backend\commands\matview.c, ExecRefreshMatView, вызов CheckTableNotInUse
Обсуждают сегодня