【问题标题】:Dynamic query in trigger function in PostgreSQLPostgreSQL 中触发函数中的动态查询
【发布时间】:2014-04-17 01:30:22
【问题描述】:

我正在尝试在触发器函数中执行动态查询,但我不断收到 Missing FROM-clause entry for table "new"

为什么会出现错误,我该如何解决?

CREATE OR REPLACE FUNCTION "Site"."UpdateAncestorModified"()
  RETURNS trigger AS
$BODY$BEGIN
    EXECUTE
        format
        ('
            UPDATE 
                "' || TG_TABLE_SCHEMA || '"."' || TG_TABLE_NAME || '" 
            SET
                modified = NEW.modified
            WHERE
                id = NEW."ancestorId"
            AND
                modified <> NEW.modified
        ')
    USING
        NEW;
    RETURN NEW;
END$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

【问题讨论】:

    标签: sql function postgresql triggers sql-update


    【解决方案1】:

    我不得不将NEW 更改为($1),因为它是对第一个绑定参数的引用。

    正确的查询是:

    CREATE OR REPLACE FUNCTION "Site"."UpdateAncestorModified"()
      RETURNS trigger AS
    $BODY$BEGIN
        EXECUTE
            format
            ('
                UPDATE 
                    "' || TG_TABLE_SCHEMA || '"."' || TG_TABLE_NAME || '" 
                SET
                    modified = ($1).modified
                WHERE
                    id = ($1)."ancestorId"
                AND
                    modified <> ($1).modified
            ')
        USING
            NEW;
        RETURN NEW;
    END$BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      相关资源
      最近更新 更多