Триггер PostgreSQL не работает — ни ДО, ни ПОСЛЕ DELETE

Я только что отказался от 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();

Мой вопрос состоит из двух частей:

  1. Если я использую AFTER DELETE, как указано выше, строка будет удалена, но оператор обновления не обновит поле в таблице «рабочий процесс».

  2. Если я использую BEFORE DELETE, таблица процессов вообще не будет выполнять удаление и выдаст сообщение об ошибке «Нет уникального идентификатора для этой строки».

Может кто подскажет?

7
задан Erwin Brandstetter 21 May 2012 в 22:11
поделиться