Höchstwahrscheinlich eine Frage von Schema vs. Schema search_path
. Die Funktion wird im Standardschema des erstellenden Benutzers erstellt. Wenn das nicht im search_path
steht des aktuellen Benutzers, es ist nicht sichtbar.
Einzelheiten:
Typischerweise erstellen Sie öffentliche Funktionen im Schema public
und dieses Schema in jedem search_path
haben .
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-Qualifizierung wird nur benötigt, wenn public
ist sowieso nicht das Standardschema.
Auch Ihr GRANT
Befehle machen keinen Sinn. Die EXECUTE
Das Privileg für Funktionen wird public
gewährt standardmäßig. Und sobald Sie public
gewähren , müssen Sie anderen Benutzern nicht gewährt werden. Vor allem nicht zu postgres
, das ist der OWNER
sowieso und auch ein Superuser. Das Handbuch:
Sie müssen USAGE
gewähren auf dem SCHEMA
wo die Funktion erstellt wird. Die public
Schema gewährt USAGE
zu public
(jeder) standardmäßig.
Umwandlung in integer
ändert hier nichts, da ein numerisches Literal ohne Dezimalpunkt automatisch in Integer umgewandelt wird. Details zu Konstanten im Handbuch.