FUNCTION update_firebase_logs() RETURNS trigger AS $update_firebase_logs$
                  
                  
                      BEGIN
                  
                  
                          -- Проверить, что указаны имя сотрудника и зарплата
                  
                  
                          IF NEW.processed_at IS not NULL THEN
                  
                  
                              insert into firebase_log_new(created_at, message, processed_at) values(new.*);
                  
                  
                        RETURN NULL;
                  
                  
                          END IF;
                  
                  
                          RETURN NEW;
                  
                  
                      END;
                  
                  
                  $update_firebase_logs$ LANGUAGE plpgsql;
                  
                  
                  
                  
                  
                  CREATE TRIGGER trigger_insert_firebase_logs
                  
                  
                      before INSERT ON firebase_log
                  
                  
                      FOR EACH ROW
                  
                  
                      EXECUTE FUNCTION update_firebase_logs();
                  
                  
                  
                  
                  
                  Т.е. при добавлении данных в одну таблицу - идёт проверка на NULL, в случае, если не NULL - данные записываются в другую таблицу
                  
                  
                  Да, всё работает, всё круто
                  
                  
                  
                  
                  
                  Теперь возник вопрос второй
                  
                  
                  Как как правильно подключить эту фукнцию так, чтобы при обновлении таблицы ( в случае, когда поле после обновления будет не NULL) - данные перекидывались в другую таблицу
                  
                  
                  
                  
                  
                  Проблему решил так:
                  
                  
                  CREATE TRIGGER trigger_update_firebase_logs
                  
                  
                      after UPDATE ON firebase_log
                  
                  
                      FOR EACH ROW
                  
                  
                      EXECUTE FUNCTION update_firebase_logs();
                  
                  
                  
                  
                  
                  Но она оставляет старые строки в таблице
                  
                  
                  
                  
                  
                  Т.е. при обновлении нужно удалить старую строку, а новую запихнуть в другую таблицу. 
                  
                  
                  Мб подскажите что?
                  
                  
                
Написать другую триггерную функцию (для BEFORE UPDATE), которая делает то, что нужно.
Всё же не получается сообразить Что должна возвращать такая функция в случае, когда надо строку удалить ?
NULL и выполнять DELETE, казалось бы. А что, не получается?
А можно как-то выполнить DELETE старой строки, если в таблице нет OID и поля могут быть не уникальны ( ну прям вот одинаковые все поля у нескольких строк ) ?
Во-первых, такую модель нужно сразу выкинуть переделать. Во-вторых, а сами-то Вы как можете знать, какую из строк нужно удалить (см. "во-первых")?
Нельзя удалить строку в таблице в триггере на эту таблицу вроде?)
хз)) всё работает)
Обсуждают сегодня