10

当我在 Postgres 数据库中创建或更新函数或过程时,我LANGUAGE 'plpgsql' VOLATILE会在函数末尾看到。
这是什么意思,它的目的是什么?

4

2 回答 2

24

来自Postgres 文档

VOLATILE 表示即使在单个表扫描中函数值也可以更改,因此无法进行优化。从这个意义上说,相对较少的数据库函数是易变的;一些例子是 random()、currval()、timeofday()。但请注意,任何具有副作用的函数都必须归类为 volatile,即使其结果是完全可预测的,以防止调用被优化掉;一个例子是 setval()。

于 2012-09-25T06:06:33.420 回答
9

尤其重要的是,LANGUAGE 'plpgsql' VOLATILE意味着有人没有收到备忘录。

中的语言名称CREATE FUNCTION是一个标识符,不应被引用。应该:

LANGUAGE plpgsql VOLATILE

不当行为会导致令人困惑的错误。看:

关于函数波动:

于 2013-02-20T21:45:13.097 回答