我有许多带有关联审计表的表。这些表分别命名为X和X_aud,其中X是要审计的表的名称。我有一个在INSERT,UPDATE或DELETE之前调用的触发器函数,我想为所有表调用相同的函数,但我无法弄清楚如何编写触发器函数。我到目前为止所尝试的是:
CREATE OR REPLACE FUNCTION audit_maintenance() RETURNS trigger AS $$
BEGIN
IF (TG_OP = 'DELETE') THEN
EXECUTE 'INSERT INTO ' || TG_TABLE_NAME || '_aud VALUES ' || OLD.*;
RETURN OLD;
END IF;
EXECUTE 'INSERT INTO ' || TG_TABLE_NAME || '_aud VALUES ' || NEW.*;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
还有各种其他版本的NEW。*在引号内等。但似乎没有任何效果。有没有其他人尝试类似的东西,如果是这样你是怎么做的
由于
答案 0 :(得分:0)
答案 1 :(得分:0)
这个问题已被提出(并且很好地回答)。解决方案是使用EXECUTE ... USING语法。这当然适用于9.3,但最初的答案说它在8.4及以上工作
EXECUTE 'INSERT INTO ' || TG_TABLE_NAME || '_aud SELECT $1.*' USING NEW;