Insertar NEW. * Desde un disparador genérico usando EXECUTE en PL / pgsql

Tengo varias tablas que utilizan la función "Particionamiento" de Postgres. Quiero definir un activador ANTES DE INSERTAR LA FILA en cada tabla que 1) creará dinámicamente la partición en caso de que la inserción se produzca en la tabla principal y 2) vuelva a ejecutar la inserción en la partición.

Algo como:

CREATE OR REPLACE FUNCTION partition_insert_redirect( )
RETURNS trigger AS $BODY$
BEGIN
  ... create the new partition and set up the redirect Rules ...

  /* Redo the INSERT dynamically.  The new RULE will redirect it to the child table */
  EXECUTE 'INSERT INTO ' || quote_ident(TG_TABLE_SCHEMA) || '.' || quote_ident(TG_TABLE_NAME) ||
          ' SELECT NEW.*'
END

Pero el registro "NUEVO" no es visible dentro de EXECUTE SQL. ¿Cómo puedo hacer este trabajo tan simple como sea posible?

Como alternativa, ¿puedo iterar sobre los campos en el registro NUEVO de alguna manera?

He pensado en usar una tabla temporal:

EXECUTE 'CREATE TEMPORARY TABLE new_row (LIKE ' ||
        quote_ident(TG_TABLE_SCHEMA) || '.' || quote_ident(TG_TABLE_NAME) ||
        ') ON COMMIT DROP';

INSERT INTO new_row SELECT NEW.*;

EXECUTE 'INSERT INTO ' || quote_ident(TG_TABLE_SCHEMA) || '.' || quote_ident(TG_TABLE_NAME) ||
       ' SELECT * FROM new_row';
DROP TABLE new_row;

Pero esto tampoco funciona debido a la referencia en caché a una tabla temporal:¿Por qué obtengo errores de "la relación con OID ##### no existe" al acceder a tablas temporales en las funciones PL / PgSQL?

Estoy usando Postgres 8.2 y no puedo cambiar a ninguna otra versión.

EDITAR:
Como señaló @alvherre, esto probablemente se puede hacer en Postgres 8.4 con la sintaxis EJECUTAR ... USANDO. Vea un ejemplo enhttp://wiki.postgresql.org/wiki/PL/pgSQL_Dynamic_Triggers

Respuestas a la pregunta(3)

Su respuesta a la pregunta