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.