“LANGUAGE'plpgsql'VOLATILE”是什么意思?

时间:2012-09-25 06:00:46

标签: postgresql plpgsql

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

2 个答案:

答案 0 :(得分:17)

来自Postgres docs

  

VOLATILE表示功能值即使在a内也可以改变   单表扫描,因此无法进行优化。相对较少   数据库函数在这个意义上是不稳定的一些例子是   random(),currval(),timeofday()。但请注意任何具有的功能   副作用必须归类为易变,即使其结果相当   可预测的,以防止呼叫被优化掉;一个例子是   SETVAL()。

答案 1 :(得分:6)

至少,LANGUAGE 'plpgsql' VOLATILE表示有人没有收到备忘录。

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

LANGUAGE plpgsql VOLATILE

医疗事故可能导致混淆错误。这个相关答案的更多细节:
PostgreSQL procedural language "C" not found