все ли ок ?
                  
                  
                  
                  
                  
                  есть таблица куда инсертятся логи, например
                  
                  
                  
                  
                  
                  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 читали)? А так, вообще — прописать явно все ссылки на таблицы и т.п. (но это относится не только к триггерам, а вообще к любым запросам). > Вот так я написал, пока не тестил. Стремно Хмм... а в чём проблема с тестированием?
Обсуждают сегодня