Hoogstwaarschijnlijk een kwestie van schema versus schema search_path
. De functie is gemaakt in het standaardschema van de aanmakende gebruiker. Als dat niet in het search_path
staat van de huidige gebruiker, is het niet zichtbaar.
Details:
Normaal gesproken maakt u openbare functies aan in het schema public
en heb dat schema in ieders 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;
Schemakwalificatie is alleen nodig als public
is sowieso niet het standaardschema.
Ook uw GRANT
commando's hebben geen zin. De EXECUTE
privilege voor functies wordt verleend aan public
standaard. En zodra je aan public
verleent, , is het niet nodig om andere gebruikers toe te kennen. Vooral niet om postgres
, wat de OWNER
. is hoe dan ook en ook nog een superuser. De handleiding:
U moet wel USAGE
. toekennen op het SCHEMA
waar de functie wordt gemaakt. De public
schema verleent USAGE
naar public
(iedereen) standaard.
Casten naar integer
verandert hier niets omdat een numerieke letterlijke zonder decimale punt automatisch tot integer wordt gedwongen. Details over constanten in de handleiding.