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í.