【问题标题】:Can a PostgreSQL (PL/pgSQL) trigger function depending on special variables OLD, NEW, TG_OP etc. be pure and hence IMMUTABLE?取决于特殊变量 OLD、NEW、TG_OP 等的 PostgreSQL (PL/pgSQL) 触发函数是否可以是纯的,因此是 IMMUTABLE?
【发布时间】:2020-05-09 04:22:02
【问题描述】:

PostgreSQL 手册将 OLD、NEW、TG_OP 等描述为可用于 PL/pgSQL 触发器过程的“特殊变量”。它还将 IMMUTABLE 函数定义为“保证在给定相同参数的情况下永远返回相同的结果”。

在评估函数纯度的情况下,这些特殊变量能否被视为触发过程参数?还是它们更类似于函数外部的变量,因此任何依赖于它们的触发过程都不应该被标记为 IMMUTABLE?

【问题讨论】:

  • 欢迎使用 stackoverflow。参观并获得您的第一个徽章-stackoverflow.com/tour
  • 触发器函数永远不可能是不可变的
  • 谢谢,“永不改变”的答案也很容易记住。

标签: postgresql triggers plpgsql


【解决方案1】:

OLD、NEW、TG_OP 更像是在触发函数内部可用的全局变量。您没有将它们明确定义为参数:

CREATE OR REPLACE FUNCTION foo() RETURNS TRIGGER AS... 
   ...
   IF TG_OP = 'INSERT' AND NEW.field_foo =....

foo 函数没有定义参数,但是 TG_OP 和 NEW 可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多