Hej,
Potrzebuję utworzyć parę trigger/funkcja, która spowoduje to, że w momencie zmiany jednej wartości jednej kolumny, w innej zapisze się wynik pewnego działania. Na ten moment dotarłem do miejsca, gdzie jeśli zmienię jedną wartość tej kolumny, to cała inna kolumna zostaje zmieniona.
Trigger:
CREATE TRIGGER update_day
AFTER UPDATE
ON test
FOR EACH ROW
EXECUTE update_days();
Funkcja:
CREATE OR REPLACE FUNCTION update_days()
RETURNS trigger AS
$BODY$
BEGIN
IF NEW.start_date <> OLD.start_date THEN
UPDATE test SET days=end_date::date - new.start_date::date;
ELSEIF NEW.end_date <> OLD.end_date THEN
UPDATE test SET days=new.end_date::date - start_date::date;
END IF;
RETURN NEW;
END
$BODY$
LANGUAGE plpgsql
I teraz jak zrobię:
UPDATE test SET start_date='2019-01-01' WHERE id=1;
To w tym momencie kolumna days zostaje w całości nadpisana nowymi wyliczonymi wartościami. A docelowo chodzi o to, aby tylko jeden rekord został zmodyfikowany (z id=1).