gpt4 book ai didi

postgresql - 我应该在执行查询的函数中使用 STABLE 还是 VOLATILE?

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

我正在尝试对检查计数是否大于或等于 2 的特定函数使用正确的修饰符,但我不确定要使用哪个,函数如下:

CREATE FUNCTION check_table_ids()
RETURNS trigger AS
$$
DECLARE
counter integer := (SELECT count(*) FROM table WHERE fk_id = NEW.fk_id AND status <> 'CANCELED');
BEGIN
IF counter >= 2 THEN
RAISE EXCEPTION 'The number of entries for "%" is greater or equal than 2', NEW.fk_id;
END IF;

RETURN NEW;
END;
$$ LANGUAGE plpgsql VOLATILE;

顺便说一句,这个函数将在插入时由触发器调用。

最佳答案

根据手册(https://www.postgresql.org/docs/current/static/sql-createfunction.html)

STABLE indicates that the function cannot modify the database, and that within a single table scan it will consistently return the same result for the same argument values, but that its result could change across SQL statements.

因此,如果您修改数据库或在不更改数据库的情况下给出不同的结果,则使用 VOLATILE,否则使用 STABLE

对于您问题中的代码 STABLE 应该没问题。

这由触发器调用这一事实并没有什么不同,因为它是您声明为 STABLE 的函数的内容,而不是它的用法。

关于postgresql - 我应该在执行查询的函数中使用 STABLE 还是 VOLATILE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39253415/

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