gpt4 book ai didi

postgresql - 触发 .. AFTER 和 BEFORE 特定列已更改

转载 作者:行者123 更新时间:2023-11-29 14:12:29 34 4
gpt4 key购买 nike

我是一个 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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com