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