Très probablement une question de schéma par rapport au schéma search_path
. La fonction est créée dans le schéma par défaut de l'utilisateur créateur. Si ce n'est pas dans le search_path
de l'utilisateur actuel, il n'est pas visible.
Détails :
Typiquement, vous créeriez des fonctions publiques dans le schéma public
et avoir ce schéma dans le search_path
de tout le monde .
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 qualification de schéma n'est nécessaire que si public
n'est de toute façon pas le schéma par défaut.
Aussi, votre GRANT
les commandes n'ont aucun sens. Le EXECUTE
le privilège pour les fonctions est accordé à public
par défaut. Et une fois que vous accordez à public
, il n'est pas nécessaire d'accorder aux autres utilisateurs. Surtout pas pour postgres
, qui est le OWNER
de toute façon et un superutilisateur, aussi. Le manuel :
Vous devez accorder USAGE
sur le SCHEMA
où la fonction est créée. Le public
le schéma accorde USAGE
à public
(tout le monde) par défaut.
Conversion en integer
ne change rien ici car un littéral numérique sans point décimal est automatiquement converti en entier. Détails sur les constantes dans le manuel.