有两张表行程和路线。我创建了一个触发器来更改要更新的trips 表和一个触发器函数来计算当月的总数。
create or replace function month_sum_update1() returns trigger as
$BODY$
DECLARE
summ int;
BEGIN
select sum(quantity*price) into summ from trips, routes
WHERE trips.id_route = routes.id_route
AND (date_travel<=now() AND date_travel>=now()-interval '1 month');
UPDATE trips set all_sum_column = summ;
return new;
END;
$BODY$
language plpgsql;
create trigger on_date_insert_update1 before update on trips
FOR EACH ROW
EXECUTE PROCEDURE month_sum_update1();
接下来我做一个更新:
update trips set quantity = 5 where id_trip = 9;
给出错误消息:
ERROR: ОШИБКА: превышен предел глубины стека
HINT: Увеличьте параметр конфигурации "max_stack_depth" (текущее значение 2048 КБ), предварительно убедившись, что ОС предоставляет достаточный размер стека.
CONTEXT: SQL-оператор: "select sum(quantity*price) from trips, routes
WHERE trips.id_route = routes.id_route
AND (date_travel<=now() AND date_travel>=now()-interval '1 month')"
функция PL/pgSQL month_sum_update1(), строка 5, оператор SQL-оператор
SQL-оператор: "UPDATE trips set all_sum_column = summ"
функция PL/pgSQL month_sum_update1(), строка 8, оператор SQL-оператор
SQL-оператор: "UPDATE trips set all_sum_column = summ"
如何正确修复功能和触发?