Molto probabilmente una questione di schema vs. schema search_path
. La funzione viene creata nello schema predefinito dell'utente che la crea. Se non è nel search_path
dell'utente corrente, non è visibile.
Dettagli:
In genere, creeresti funzioni pubbliche nello schema public
e avere quello schema nel search_path
di tutti .
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 qualificazione dello schema è necessaria solo se public
comunque non è lo schema predefinito.
Inoltre, il tuo GRANT
i comandi non hanno senso. Il EXECUTE
il privilegio per le funzioni è concesso a public
per impostazione predefinita. E una volta che concedi a public
, non è necessario concedere ad altri utenti. Soprattutto non per postgres
, che è il OWNER
comunque e anche un superutente. Il manuale:
Devi concedere USAGE
sullo SCHEMA
dove viene creata la funzione. Il public
lo schema concede USAGE
a public
(tutti) per impostazione predefinita.
Trasmetti a integer
non cambia nulla qui perché un valore letterale numerico senza punto decimale viene forzato automaticamente a un intero. Dettagli sulle costanti nel manuale.