【问题标题】:What does “LANGUAGE 'plpgsql' VOLATILE” mean?“语言'plpgsql'易失性”是什么意思?
【发布时间】:2012-09-16 14:52:08
【问题描述】:

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

【问题讨论】:

  • 请注意,不推荐使用引用语言的名称,并且会在 9.2 中给您一个错误,您应该改用 LANGUAGE plpgsql。
  • 为什么不直接阅读文档?

标签: postgresql plpgsql volatile


【解决方案1】:

来自Postgres docs:

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

【讨论】:

    【解决方案2】:

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

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

    LANGUAGE plpgsql VOLATILE
    

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

    关于函数波动性:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-05
      • 2020-10-30
      • 1970-01-01
      • 2011-08-27
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多