"LANGUAGE'plpgsql'VOLATILE"是什么意思?

Dor*_*sey 5 postgresql plpgsql

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

Aka*_* KC 17

来自Postgres的文档:

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


Erw*_*ter 6

尤其是,LANGUAGE 'plpgsql' VOLATILE意味着有人没有得到备忘录.

语言名称CREATE FUNCTION是标识符,不应引用.应该:

LANGUAGE plpgsql VOLATILE
Run Code Online (Sandbox Code Playgroud)

医疗事故可能导致混淆错误.这个相关答案的更多细节:
找不到PostgreSQL过程语言"C"