0

我是 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(); 

但用之后而不是之前。而且我在何时或附近不断出错。那是因为我必须使用 BEFORE 吗?如果我需要在更新列之后执行该过程并且它确实发生了变化怎么办?

4

1 回答 1

4

PostgreSQL 8.4 不支持 WHEN 与触发器,来自精美手册

概要

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

那里没有 WHEN。您可以将 WHEN 逻辑放在触发函数中:

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

或至少升级到PostgreSQL 9.0并在创建触发器时使用 WHEN。

于 2012-04-02T05:33:20.347 回答