Я только что отказался от MySQL в пользу PostgreSQL, и у меня есть вопрос относительно триггеров. Этот триггер предназначен для обновления поля в таблице «рабочий процесс», если строка в таблице «процессы» удалена.
CREATE OR REPLACE FUNCTION fn_process_delete() RETURNS TRIGGER AS $$
BEGIN
UPDATE workflow SET deleted_process_name = OLD.process_name
WHERE process_id = OLD.process_id;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS process_delete ON processes;
CREATE TRIGGER process_delete
AFTER DELETE ON processes
FOR EACH ROW
EXECUTE PROCEDURE fn_process_delete();
Мой вопрос состоит из двух частей:
Если я использую AFTER DELETE, как указано выше, строка будет удалена, но оператор обновления не обновит поле в таблице «рабочий процесс».
Если я использую BEFORE DELETE, таблица процессов вообще не будет выполнять удаление и выдаст сообщение об ошибке «Нет уникального идентификатора для этой строки».
Может кто подскажет?