>
>  Esa solución funciona muy bien cuando la función no precisa de parámetros
> de entrada, porque cuando hago lo siguiente:
>
> CREATE FUNCTION eliminar(parametro character varying, refcursor) RETURNS
> refcursor AS '
> declare micursor refcursor;
> BEGIN
>     OPEN micursor FOR SELECT * FROM nmusuario;
>     RETURN micursor;
> END;
> ' LANGUAGE plpgsql;
>
> -- BEGIN;
> SELECT eliminar('probando','funccursor');
> FETCH ALL IN funccursor;
> -- COMMIT;
>
> me da como error ERROR:  cursor "funccursor" does not exist, la verdad es
> que esto se hace muy simple en otros gestores de base de datos, no tengo
> idea de por qué en postgres lo han complicado tanto.
>

Puedes utilizar el tipo de retorno setof record en  lugar de refcursor:

CREATE OR REPLACE FUNCTION mi_funcioin(IN id int, OUT campo1 int, OUT campo2
text)
  RETURNS SETOF record AS
$BODY$
declare
begin
        return query SELECT campo10,campo20 FROM nmusuario where idUsuario =
id;
        return;
end;
$BODY$
  LANGUAGE 'plpgsql'

----
select * from mi_funcion(  5432  );

Responder a