作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一个 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 或接近 WHEN 时不断出错。那是因为我必须使用 BEFORE 吗?如果我需要在更新列后执行该过程并且它确实发生了变化怎么办?
最佳答案
PostgreSQL 8.4 不支持带触发器的 WHEN,来自 fine manual :
Synopsis
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。
关于postgresql - 触发 .. AFTER 和 BEFORE 特定列已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9967223/
我是一名优秀的程序员,十分优秀!