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