sql >> Base de Datos >  >> RDS >> PostgreSQL

Función de activación de PostgreSQL 9.3 para insertar en la tabla con nombre parametrizado

CREATE FUNCTION log_roll_test()
  RETURNS trigger AS
$func$
BEGIN
   EXECUTE format('INSERT INTO %I SELECT ($1).*'
                , to_char(NEW.updt_ts, '"log"WW'))   -- child table name
   USING NEW;
   RETURN NULL;
END
$func$ LANGUAGE plpgsql;

No puede hacer referencia a NEW dentro de la cadena de consulta. NEW es visible en el cuerpo de la función, pero no dentro de EXECUTE ambiente. La mejor solución es pasar los valores en USING cláusula.

También sustituí el equivalente to_char(NEW.updt_ts, '"log"WW') para el nombre de la tabla. to_char() es más rápido y sencillo aquí.