Триггер .. ПОСЛЕ и ДО с измененным конкретным столбцом - PullRequest
0 голосов
/ 01 апреля 2012

Я пользователь postgresql и пытаюсь следовать этому: http://www.postgresql.org/docs/current/interactive/sql-createtrigger.html

CREATE TRIGGER check_update 
    BEFORE UPDATE ON accounts 
    FOR EACH ROW 
    WHEN (OLD.balance IS DISTINCT FROM NEW.balance) 
    EXECUTE PROCEDURE check_account_update(); 

но с ПОСЛЕ вместо ДО. и я продолжаю получать сообщение об ошибке или рядом с ней. это потому, что я должен использовать ДО? Что делать, если мне нужно выполнить процедуру после обновления столбца, и она действительно изменилась?

1 Ответ

4 голосов
/ 02 апреля 2012

PostgreSQL 8.4 не поддерживает КОГДА с триггерами, из тонкой инструкции :

Синопсис

CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] }
ON table [ FOR [ EACH ] { ROW | STATEMENT } ]
EXECUTE PROCEDURE funcname ( arguments )

Там нет КОГДА. Вы можете поместить логику WHEN в свою функцию триггера:

if old.balance is not distinct from new.balance then
    return new;
end if;
-- The rest of the trigger...

или обновите как минимум до PostgreSQL 9.0 и используйте WHEN при создании триггера.

...