Lo más probable es que sea una cuestión de esquema frente a esquema search_path
. La función se crea en el esquema predeterminado del usuario creador. Si eso no está en search_path
del usuario actual, no es visible.
Detalles:
Por lo general, crearía funciones públicas en el esquema public
y tener ese esquema en la search_path
de todos .
CREATE OR REPLACE FUNCTION public.fun_validatepost(integer, integer)
RETURNS integer AS
$BODY$
...
$BODY$ LANGUAGE plpgsql;
ALTER FUNCTION public.fun_validatepost(integer, integer) OWNER TO postgres;
La calificación de esquema solo es necesaria si public
no es el esquema predeterminado de todos modos.
Además, su GRANT
los comandos no tienen sentido. El EXECUTE
el privilegio de las funciones se otorga a public
por defecto. Y una vez que otorgas a public
, no hay necesidad de otorgar a otros usuarios. Especialmente no para postgres
, que es el OWNER
de todos modos y un superusuario, también. El manual:
Necesita otorgar USAGE
en el SCHEMA
donde se crea la función. El public
el esquema otorga USAGE
a public
(todos) por defecto.
Conversión a integer
no cambia nada aquí porque un literal numérico sin punto decimal se convierte en entero automáticamente. Detalles sobre constantes en el manual.