触发..在特定列更改后的AFTER和BEFORE

时间:2012-04-01 18:51:23

标签: postgresql triggers postgresql-8.4

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

但是使用AFTER代替BEFORE。而且我在WHEN上或附近不断收到错误。 那是因为我必须使用BEFORE吗?如果我需要在更新列后执行该过程并且它确实已经改变了怎么办?

1 个答案:

答案 0 :(得分:4)

PostgreSQL 8.4不支持WHEN with triggers,来自fine manual

  

<强>概要

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。

相关问题