I am trying to write a dynamic trigger function on insert operations so that the same function can be used across all my tables.  In this case my tables are ‘test’ and ‘test_a’ (my convention is that all audit table names are the name of the original table concatenated with ‘_a’).  Below is part of my code in plpgsql:

 

CREATE OR REPLACE FUNCTION audit_insert()

  RETURNS "trigger" AS

$BODY$

DECLARE

      new_audit_row RECORD;

      dynamic_SQL text;

BEGIN

      --Instantiate new_audit_row to the required type.

      dynamic_SQL :=  'SELECT INTO new_audit_row * ' ||

                      'FROM ' || quote_ident(TG_RELNAME || '_a') || ';';

 

      EXECUTE dynamic_SQL;

 

      --... more code here

END;

$BODY$

  LANGUAGE 'plpgsql' VOLATILE;

 

However, when I try to insert data in ‘test’ I am getting the following error message:

 

ERROR:  syntax error at or near "INTO" at character 8

QUERY:  SELECT INTO new_audit_row * FROM "test_a";

CONTEXT:  PL/pgSQL function "audit_insert" line 18 at execute statement

 

 

The funny thing is that the documentation I read about SELECT INTO and RECORD types give the following example, amongst others:

 

DECLARE
    users_rec RECORD;
BEGIN
    SELECT INTO users_rec * FROM users WHERE user_id=3;
 
--...more code
END;

 

(full code can be found at http://www.postgresql.org/docs/8.0/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-ASSIGNMENT )

 

Which is basically identical (except for the WHERE clause) to the query returned in the my error message!!

 

Can anyone help please?

 

Regs,

Mark J Camilleri

Reply via email to