Я новичок в postgresql 9.3 и попал в беду из-за простой операции.Я должен выполнить с помощью триггера сумму числовых значений двух столбцов и записать результат в третий столбец.Это моя стартовая таблица:
CREATE TABLE pratica
(
progressivo text NOT NULL DEFAULT nextval('pratica_prog_seq'::regclass),
sal1_importo_arc numeric(10,2),
sal1_spese numeric(10,2),
sal1_totale numeric(10,2),
note text,
CONSTRAINT pratica_pkey PRIMARY KEY (progressivo)
)
WITH (
OIDS=FALSE
);
А это функция и триггер:
CREATE OR REPLACE FUNCTION sum_sal1()
RETURNS trigger AS
$$
BEGIN
IF NEW.sal1_importo_arc IS NULL
THEN
UPDATE pratica
SET sal1_totale = NEW.sal1_spese
WHERE pratica.sal1_totale IS DISTINCT FROM pratica.sal1_spese;
ELSE IF NEW.sal1_spese IS NULL
THEN
UPDATE pratica
SET sal1_totale = NEW.sal1_importo_arc
WHERE pratica.sal1_totale IS DISTINCT FROM pratica.sal1_importo_arc;
ELSE
UPDATE pratica
SET sal1_totale = (SELECT (NEW.sal1_importo_arc + NEW.sal1_spese))
WHERE pratica.sal1_totale IS DISTINCT FROM (SELECT (pratica.sal1_importo_arc + pratica.sal1_spese));
END IF;
END IF;
RETURN NULL;
END
$$
LANGUAGE plpgsql VOLATILE
CREATE TRIGGER sum_sal1
AFTER INSERT OR UPDATE OF sal1_importo_arc
ON pratica
FOR EACH ROW
EXECUTE PROCEDURE sum_sal1();
Столбцы sal1_spese
и sal1_importo_arc
могут содержать значения NULL
и, следовательно,Я поставил соответствующие условия.Проблема заключается в том, что при срабатывании триггера он обновляет столбец sal1_total
всей таблицы тем же значением измененной строки, а не только строкой объекта изменения.Что я не прав?Спасибо