我是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吗?如果我需要在更新列后执行该过程并且它确实已经改变了怎么办?
答案 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。