gpt4 book ai didi

postgresql - Postgres 触发器仅在 NEW.column = true 时执行过程

转载 作者:行者123 更新时间:2023-11-29 13:01:07 24 4
gpt4 key购买 nike

使用 PostgreSQL - 我试图触发一个过程,该过程仅在 NEW(插入或更新)行的 is_default 列值设置为 bool 值真

这是我尝试过的方法,但在我的 WHEN 行中出现语法错误:

CREATE TRIGGER trigger_price_group_default_price_handler
BEFORE UPDATE OR INSERT
ON price_groups
WHEN (NEW.is_default = true)
EXECUTE PROCEDURE clear_default_price_group();

有什么想法吗?

最佳答案

似乎是一个疏忽:FOR EACH ROW 丢失了:

CREATE TRIGGER trigger_price_group_default_price_handler
BEFORE UPDATE OR INSERT ON price_groups
<b>FOR EACH ROW</b>
WHEN (NEW.is_default)
EXECUTE PROCEDURE clear_default_price_group();

如果您不提供,per documentation :

If neither is specified, FOR EACH STATEMENT is the default.

大胆强调我的。并且您不能在语句级触发器中引用 NEWOLD,这使得 WHEN 子句(引用 NEW ) 语法错误 - 在任何版本的 Postgres 中:

Statement-level triggers can also have WHEN conditions, although the feature is not so useful for them since the condition cannot refer to any values in the table.

除此之外,您至少需要 Postgres 9.0 才能在 CREATE TRIGGER 中使用 WHEN 子句

我认为默认情况下 FOR EACH STATEMENT 是一种罕见的情况,这有点不幸。一定是出于历史原因,我想。

旁白:表达式 NEW.is_default = true 只是 NEW.is_default 的一种嘈杂表达方式。 boolean 值可以直接用作表达式。

关于postgresql - Postgres 触发器仅在 NEW.column = true 时执行过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29787618/

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