Antagligen en fråga om schema kontra schema search_path
. Funktionen skapas i standardschemat för den skapande användaren. Om det inte finns i search_path
för den aktuella användaren är den inte synlig.
Detaljer:
Vanligtvis skulle du skapa offentliga funktioner i schemat public
och ha det schemat i everbodys search_path
.
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;
Schema-kvalificering behövs endast om public
är inte standardschemat ändå.
Även din GRANT
kommandon är meningslösa. EXECUTE
privilegium för funktioner ges till public
som standard. Och när du beviljar public
, det finns inget behov av att bevilja andra användare. Särskilt inte till postgres
, som är OWNER
i alla fall och en superanvändare också. Handboken:
Du måste bevilja USAGE
på SCHEMA
där funktionen skapas. public
schemat beviljar USAGE
till public
(alla) som standard.
Castar till integer
ändrar ingenting här eftersom en numerisk bokstav utan decimalpunkt tvingas automatiskt till heltal. Detaljer om konstanter i manualen.