Hello, with help of Bricklen, I have found that the problem is the scope of call EXECUTE. When this is called it seems to be "launched" outside of the trigger's scope and OLD/NEW is not defined. (Manual suggests it) The remaining question is how to compare OLD.* and NEW.* in generic way for 8.0.x version Regards, Bohdan > > IF TG_OP = 'DELETE' THEN > EXECUTE 'INSERT INTO audit.' || TG_RELNAME || > ' SELECT _name, now(), OLD.*;'; > RETURN OLD; > ===================== > > and binding the procedure to trigger AFTER INSERT,DELETE, UPDATE, gives me > problem: > > ERROR: NEW used in query that is not in a rule > CONTEXT: SQL statement "INSERT INTO audit.communities SELECT _name, now(), > row(NEW);"