Запуск триггера postgresql не останавливается?

Я пытаюсь работать с триггером здесь. У меня такое отношение:

salary(salaryid, userid, netsalary, reward, totalsalary)

Поэтому я хочу обновлять totalsalary каждый раз, когда я вставляю и обновляю (netsalary или reward), он будет пересчитывать: totalsalary = netsalary + reward.

Для этого я создал функцию и триггер:

CREATE FUNCTION reCount()
 RETURNS TRIGGER AS $function$
BEGIN 
 UPDATE salary SET totalsalary = netsalary + reward;
 RETURN NEW;
END;

CREATE TRIGGER updateTotalsalary
 AFTER INSERT OR UPDATE
 ON salary
 FOR EACH ROW
 EXECUTE PROCEDURE reCount();

Наконец, я пытаюсь выполнить проверку с помощью запроса:

INSERT INTO salary(salaryid,userid,netsalary,reward,totalsalary) 
 VALUES (1234,123, 30,2,30);

но он работает долгое время, и он, кажется, никогда не останавливается. Поэтому, когда пытаюсь остановить его, у меня появилось много строк:

SQL-заявка "UPDATE оклад зарплаты totalsalary = netsalary + reward" Функция PL/pgSQL "reCount()" строка 3 в операторе SQL

Так в чем проблема. Надеюсь, вы, ребята, можете дать мне какое-то предложение?

2 ответа

Пытаться:

CREATE TRIGGER updateTotalsalary 
AFTER INSERT OR UPDATE 
ON salary 
FOR EACH ROW
WHEN (pg_trigger_depth() = 0)
EXECUTE PROCEDURE reCount();


это может быть лучше, чем pg_trigger_depth() = 0 взломать:

CREATE TRIGGER updateTotalsalary 
AFTER INSERT OR UPDATE OF netsalary, reward
ON salary 
FOR EACH ROW
EXECUTE PROCEDURE reCount();

Для событий UPDATE можно указать список столбцов, используя этот синтаксис:

UPDATE of column_name1 [, column_name2...]

Триггер срабатывает только в том случае, если хотя бы один из перечисленных столбцов упоминается как цель команды UPDATE.

хотя лично я, вероятно, поеду за таблицей без итогового столбца и представления с ним (CREATE TABLE salary_..., CREATE VIEW salary AS SELECT..., (salary + reward) AS totalsalary FROM salary_).

licensed under cc by-sa 3.0 with attribution.