Mest sandsynligt et spørgsmål om skema vs. skema search_path . Funktionen oprettes i standardskemaet for den oprettende bruger. Hvis det ikke er i search_path af den aktuelle bruger, er den ikke synlig.
Detaljer:
Typisk vil du oprette offentlige funktioner i skemaet public og har det skema 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;
Skema-kvalifikation er kun nødvendig, hvis public er alligevel ikke standardskemaet.
Også din GRANT kommandoer giver ingen mening. EXECUTE privilegium til funktioner er givet til public som standard. Og når du giver til public , er der ingen grund til at give til andre brugere. Især ikke til postgres , som er OWNER alligevel og også en superbruger. Manualen:
Du skal give USAGE på SCHEMA hvor funktionen er oprettet. public skemaet giver USAGE til public (alle) som standard.
Caster til integer ændrer ikke noget her, fordi en numerisk bogstavelig uden decimaltegn tvinges automatisk til heltal. Detaljer om konstanter i manualen.
Overvej hurtigt at opdatere til en aktuel version af Postgres. Din software er fuldstændig forældet.