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.