все ли ок ?
есть таблица куда инсертятся логи, например
id;datetime;project;status
есть рабочая таблица
project;cnt_ok;cnt_no;dateupdate
при добавлении записи в логи, например
2020-02-02 00:00:00;project;no
мне надо обновлять cnt_no = cnt_no+1, date_update = timestamp
Вот так я написал, пока не тестил. Стремно
CREATE FUNCTION syncronize() RETURNS trigger AS $syncronize$
BEGIN
UPDATE workflow
SET cnt_ok = case when status = 'ok' when cnt_ok+1 else cnt_ok end,
cnt_no = case when status = 'no' when cnt_no+1 else cnt_no end,
dateupdate = NEW.datetime
WHERE 1=1
AND project = NEW.project
RETURN NEW;
END;
$syncronize$ LANGUAGE plpgsql;
CREATE TRIGGER syncronize BEFORE INSERT ON logs
FOR EACH ROW EXECUTE PROCEDURE syncronize();
А почему BEFORE (Вы https://www.postgresql.org/docs/current/trigger-definition.html читали)? А так, вообще — прописать явно все ссылки на таблицы и т.п. (но это относится не только к триггерам, а вообще к любым запросам). > Вот так я написал, пока не тестил. Стремно Хмм... а в чём проблема с тестированием?
Обсуждают сегодня